mod_rewrite: por que é que funciona localmente e não online?
-
03-07-2019 - |
Pergunta
Estou desenvolvendo um aplicativo localmente (sob o nome de domínio
Para trabalhar com URLs amigáveis, Eu configurei meu .htaccess como esta:
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
Ele funciona muito bem. Irritantemente, quando vai online, não é tão grande:
http://example.com/issue/my-slug/#23 retorna nenhuma variável GET. Por quê?
Solução
Meu palpite, com base na experiência do passado é RewriteBase, provavelmente porque o seu em um servidor compartilhado, ou alguma outra configuração não-padrão.
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
Outras dicas
Eu não ver que
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
deve corresponder ao URL, mas isso é a única com a bandeira [R] para fazer um redirecionamento externo. Tente comentar que fora de linha, para se certificar de que não há alguma outra parte do seu aplicativo fazendo o redirecionamento. Meu palpite é que existe.
Há algum espaço perdido entre o URL de substituição e as bandeiras. Você também pode simplificar a sua primeira regra da seguinte forma:
RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]