Apache RewriteMap avec condition générique

J’utilise apache RewriteMap avec un fichier texte pour mapper quelques anciennes URL vers de nouvelles URL, dans mon fichier (red.map) j’ai

/old-awful-url.html /new-lovely-shiny-url.html 

Ensuite, dans ma config apache, j’ai: –

 RewriteEngine On RewriteMap migration txt:/home/red.map RewriteCond ${migration:$1} /.+ RewriteRule ^(/.*) ${migration:$1} [L,R=301] 

Cela fonctionne bien mais maintenant je voudrais append un caractère générique à la condition pour correspondre aussi à certaines anciennes URL qui ont la même fin mais qui ont /cgi-bin/scriptname en tête, par exemple je veux aussi correspondre /cgi-bin/scriptname/old-awful-url.html

J’ai essayé de passer à RewriteCond pour: –

 RewriteCond ^.*${migration:$1} /.+ 

En pensant que cela correspondrait à quelque chose devant l’url du fichier, avec et sans la partie cgi, j’ai essayé quelques combinaisons sans succès, est-ce possible?

Vous devez définir /cgi-bin/scriptname comme modèle facultatif dans votre directive RewriteRule elle-même. Et la directive RewriteCond est totalement inutile ici.

 RewriteEngine On RewriteMap migration txt:/home/red.map RewriteRule ^(?:/cgi-bin/scriptname)?(/.*) ${migration:$1} [L,R=301] 

Cependant, cela échouera si vous souhaitez que l’URL réécrite inclue à nouveau la partie /cgi-bin/scriptname . Pour cela, vous devez diviser les règles en deux (ou plus?):

 RewriteEngine On RewriteMap migration txt:/home/red.map RewriteCond ${migration:$1} . RewriteRule ^(/.*) ${migration:$1} [L,R=301] RewriteCond ${migration:$2} . RewriteRule ^/(cgi-bin/scriptname)(/.*) /$1${migration:$2} [L,R=301]