Evita o loop de RewriteRule no .htaccess

2

Estou tentando introduzir boas URLs:

RewriteRule ^(.*).html$ index.php?arianne_url=content/$1 [L]

E eu quero reescrever externamente o acesso aos URLs antigos:

RewriteCond %{QUERY_STRING} arianne_url=content/([^&]*)
RewriteRule ^.* /%1.html? [R=301]

O problema é que isso termina em um loop infinito.

Eu tentei definir env e verificá-lo, mas isso ainda resulta em um loop infinito

RewriteRule ^(.*).html$ index.php?arianne_url=content/$1 [L,env=arianne:rewrite]

RewriteCond %{env:arianne} ^$
RewriteCond %{QUERY_STRING} arianne_url=content/([^&]*)
RewriteRule .* /%1.html? [R=301]

Eu tenho que fazer isso em .htaccess como eu não tenho acesso aos arquivos de configuração do servidor.

Editar:

Arquivo de registro: link

# enable nice urls
RewriteRule ^(.*).html$ index.php?arianne_url=content/$1 [L,env=arianne:rewrite]

# Redirect old style request to new nice url
RewriteCond %{env:arianne} ^$
RewriteCond %{QUERY_STRING} arianne_url=content/([^&]*)
RewriteRule ^.* /%1.html? [R=301,L]
    
por Hendrik Brummermann 28.08.2010 / 11:33

2 respostas

1

Já tentou adicionar 'L' (last) ao seu RewriteRule? ou seja,

RewriteRule ^.* /%1.html? [R=301,L]

Isto irá marcar a regra como sendo a última regra, e é essencialmente equivalente a uma declaração de quebra em C. Uma vez que esta regra é executada, ela irá parar de combinar as regras.

Poderia ser esse o motivo?

Andrew

    
por 28.08.2010 / 16:38
1

As variáveis ENV do Apache, conforme definidas na reescrita, não persistem em redirecionamentos - assim, quando você faz o R = 301, volta ao ponto um - o pedido está funcionando em um novo contexto do apache. Esse é o seu loop infinito.

Se você quiser fazer isso via reescrita (o que faz sentido - então o navegador vê a URL apropriada) você provavelmente terá que configurar um cookie ao invés de tentar usar ENV, ou então fazer algumas coisas funky com caminhos de servidores reais nos bastidores, excluindo certos de redirecionamento.

Além disso - o [L], como outros já disseram, é inútil - ele fará com que o resto dos hre rewriterules sejam completamente ignorados.

    
por 29.08.2010 / 08:21