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]