web-dev-qa-db-fra.com

htaccess 301 redirige pour le sous-répertoire de second niveau

J'ai un site Web d'annuaire avec la structure d'URL suivante.

http://mywebsite.com/information/business-name/
http://mywebsite.com/information/business-name/product-names/    
http://mywebsite.com/reviews/business-name/
http://mywebsite.com/comments/business-name/

Maintenant, il y a un changement dans le nom de l'entreprise et je veux changer les URL à celles-ci -

http://mywebsite.com/information/new-business-name/
http://mywebsite.com/information/new-business-name/product-names/    
http://mywebsite.com/reviews/new-business-name/
http://mywebsite.com/comments/new-business-name/

Comment puis-je rediriger les anciennes URL vers les nouvelles URL du fichier htaccess?

Actuellement, j'utilise temporairement les éléments suivants -

RewriteRule ^information/business-name/(.*)$ /information/new-business-name/$1 [R=301,L]
RewriteRule ^reviews/business-name/(.*)$ /reviews/new-business-name/$1 [R=301,L]
RewriteRule ^comments/business-name/(.*)$ /comments/new-business-name/$1 [R=301,L]

Y a-t-il un moyen de le réécrire dans une règle car il me suffit de changer /business-name/ en /new-business-name/?

2
Aakash

Pour combiner ces trois règles en une seule, vous pouvez utiliser l'alternance (avec une barre verticale) dans un groupe de capture et une autre référence arrière dans la substitution:

Par exemple:

RewriteRule ^(information|reviews|comments)/business-name/(.*)$ /$1/new-business-name/$2 [R=301,L]

$1 est maintenant une référence vers "informations", "avis" ou "commentaires".

Selon votre situation, vous pourriez rendre ceci plus générique:

RewriteRule ^([^/]+)/business-name/(.*)$ /$1/new-business-name/$2 [R=301,L]

Cela correspondra à n'importe lequel sous-répertoire unique précédant "/ nom-entreprise /", y compris "informations", "critiques" et "commentaires".

2
MrWhite