Pregunta

Necesito tener :

http://www.example.com/v1/mi-proyecto/ redirigido a http://ejemplo.com/mi-proyecto/

entonces :

(1) eliminar www del http_host

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

(2) eliminar la parte 'v1/' de request_uri

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

(3) También quiero redirigir todos los 404 a la página de inicio.

ErrorDocument 404 /

(4) Finalmente, todos mis documentos residen en una carpeta "v2/" que aloja el sitio web activo actual, pero no quiero "v2" en la URL, solo "/".

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

Entonces, aquí están mis reglas.Mi pregunta es:no logro (2):se redirige a / (debido a la regla (3), supongo.Creo que el orden de mis reglas debe ser defectuoso pero parece que no puedo hacerlo bien.Puede usted ayudar ?

¿Fue útil?

Solución

"Regla 3" no es una regla en absoluto, y su orden relativo a sus RewriteRules no importa. Regla 2 está fallando por alguna otra razón. No estoy seguro de si va a abordar el problema, pero me gustaría simplificar sus normas un tanto por escrito como esto:

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]

Otros consejos

Primero debe escribir cualquier regla que está causando una redirección externa (bandera R) y luego las otras reglas. De lo contrario una URL ya reescrito se puede utilizar para una redirección externa a pesar de que sólo estaba destinado a un redireccionamiento interno.

Así que no voy a cambiar el orden que tiene en este momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top