mod_rewrite: ¿por qué funciona localmente y no en línea?
-
03-07-2019 - |
Pregunta
Estoy desarrollando una aplicación localmente (bajo Nombre de dominio < mydomain > .dev ).
Para trabajar con URL amigables, configuré mi .htaccess de esta manera:
RewriteEngine on
# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://example.com/$1/?%{QUERY_STRING}[NC,R,L]
RewriteRule ^about/$ about.php [NC,L]
RewriteRule ^issues/$ issues.php [NC,L]
RewriteRule ^issue/([a-z0-9_\-]+)/$ issue.php?slug=$1 [NC,L]
SetEnv PHP_VER 5
IndexIgnore *
Options +FollowSymLinks
Funciona bien. Molesto, cuando se conecta, no es tan bueno:
http://example.com/issue/my-slug/#23 no devuelve ninguna variable GET. ¿Por qué?
Solución
Supongo que, basado en la experiencia pasada, es RewriteBase, probablemente porque estás en un servidor compartido o alguna otra configuración no estándar.
RewriteEngine on
#Set base as doc root.
RewriteBase /
# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
RewriteRule ^about/$ about.php [NC,L]
RewriteRule ^issues/$ issues.php [NC,L]
RewriteRule ^issue/([a-z0-9_\-]+)/$ issue.php?slug=$1 [NC,L]
SetEnv PHP_VER 5
IndexIgnore *
Options +FollowSymLinks
Otros consejos
No veo eso
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
debe coincidir con esa URL, pero esa es la única con el indicador [R] para hacer una redirección externa. Intente comentar esa línea para asegurarse de que no haya otra parte de su aplicación que realice la redirección. Supongo que sí.
Faltan algunos espacios en blanco entre la URL de sustitución y las banderas. También puede simplificar su primera regla de la siguiente manera:
RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]