Question

Je dois avoir:

http://www.example.com/v1/my-project/ redirigé vers http://example.com/my-project/

:

(1) retirer le www du http_host

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

(2) enlever la partie 'v1 /' du request_uri

RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]

(3) Je veux aussi rediriger tous les 404 à la page d'accueil.

ErrorDocument 404 /

(4) Enfin, tous mes documents résident effectivement dans un dossier « v2 / » qui héberge le site Web actif en cours, mais je ne veux pas « v2 » dans l'URL, juste « / »

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]

Alors, voici mes règles. Ma question est la suivante: je ne parviens pas (2): il est redirigé vers / (en raison de la règle (3) Je suppose que je pense que l'ordre de mes règles doit être défectueuse, mais je ne peux pas sembler l'obtenir droit Can.. vous aider?

Était-ce utile?

La solution

« Règle 3 » est pas une règle du tout, et son ordre par rapport à vos RewriteRules n'a pas d'importance. Règle 2 ne parvient pas pour une autre raison. Je ne sais pas si elle va résoudre votre problème, mais je simplifier vos règles un peu en les écrivant comme ceci:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

RewriteRule ^v1/(.*) /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]

Autres conseils

Vous devez d'abord écrire une règle qui provoque une redirection externe (R drapeau) et les autres règles. Dans le cas contraire une URL déjà réécrite peut être utilisé pour une redirection externe si elle était juste destiné à une redirection interne.

Je ne vais pas changer l'ordre que vous avez en ce moment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top