Estoy usando el siguiente código para dirigir todas las solicitudes de www a URL que no sean www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Esto funciona muy bien dentro de un archivo .htaccess en la raíz de mi sitio web.
Por ejemplo,
www.example.com -> example.com/
www.example.com/ -> example.com/
www.example.com/other_page -> example.com/other_page
Sin embargo, si muevo este mismo código a mi configuración de VirtualHost, las URL reescritas contienen una barra diagonal doble.
www.example.com -> example.com//
www.example.com/ -> example.com//
www.example.com/other_page -> example.com//other_page
Lo arreglé eliminando la barra diagonal de la regla de reescritura:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
Pero no puedo entender la razón de esto. Alguien sabe por qué?
fuente
RewriteRule ^/?(.*)$ http://example.com/$1 [R=301,L]
Hizo el truco.Está sucediendo porque está capturando una barra diagonal inicial
(.*)
y luego aplica otra barra diagonal antes en la nueva ubicación/$1
. No sucedió antes porque mod_rewrite se comporta de manera ligeramente diferente cuando se opera en un contexto por directorio en lugar de un contexto por servidor.Podrías evitar esto, opcionalmente, eliminando la barra diagonal. Además, puede usar RedirectMatch en un VirtualHost vacío con sus dominios excedentes, lo que crea un poco menos de procesamiento y puede verse más limpio.
fuente
Estoy incluyendo esta publicación para completar.
La documentación de Apache explica por qué este comportamiento ocurre muy bien y es la razón por la que existe la directiva 'RewriteBase'.
Simplemente incluir la directiva 'RewriteBase' en su archivo .htaccess debería lograr el resultado deseado.
Ejemplo:
De la documentación de Apache 2.2 mod_rewrite:
Mi regla general es usar casi siempre 'RewriteBase' en archivos .htaccess, y no usarlo en la configuración de Apache.
fuente
No tuve tiempo para manejar este problema, así que solo vuelva a escribir // en / :)
fuente