Pergunta

Estou desenvolvendo um aplicativo localmente (sob o nome de domínio .dev ).

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ê?

Foi útil?

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]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top