orden correcto de reglas de reescritura en un archivo htaccess
-
12-09-2019 - |
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 ?
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.