Apache mod_rewrite remove ponto de interrogação (?) e substituição de string de consulta

4

Eu registrei um RewriteRule com mod_rewrite, mas o URL substituído está errado.

A regra é:

RewriteRule ^/img/z(0|1)u(.+)\.(gif|jpg|jpeg|png)$ /image-servlet/img/?z=$1&url=$2 [NE,QSA,PT,T=image/$3]

Ao acessar o seguinte URL:

http://localhost/img/z1uABC.jpg

O redirecionamento da regra aplicada para:

http://localhost/image-servlet/img/ABC

O URL final perde a substituição da string de consulta:

?z=$1&url=$2

E são substituídos apenas por:

$2

Alguém pode me ajudar com o meu erro?

Obrigado,

e passado

    
por Andre Pastore 08.10.2009 / 20:41

5 respostas

1

Eu sei que é feio e ainda mais ineficiente, mas você já tentou:

RewriteRule ^ / img / z (. +) u (. +) \. (. +) $ / image-servlet / img /? z = $ 1 & url = $ 2 [NE, QSA, PT, T = image / $ 3]

Parece que lembro que o mod_rewrite irá corresponder apenas (. +) ou (. *) a uma variável. Obviamente (do seu exemplo), é a única coisa que está sendo reescrita corretamente.

É claro que a regra mod_rewrite demora uma eternidade para corresponder e requer que o script faça alguma validação de entrada.

Além disso, o apache suporta o comando TRACE http, que é bom para rastrear várias reescritas (acidentais). Basta trocar o GET na solicitação http com TRACE, por exemplo:

TRACE /z1uABC.jpg HTTP / 1.1

Anfitrião: foohost.com

Por fim, se você ainda estiver preso, tente executar as extensões LiveHeader ou Firebug firefox.

    
por 29.11.2009 / 03:54
2

Você também pode definir RewriteLog e RewriteLogLevel e ver se isso ajuda

    
por 29.11.2009 / 03:16
1

Tente remover o QSA dos seus sinalizadores; no seu exemplo você não está apresentado com uma string de consulta inicial - QSA e um? na substituição irá combiná-los, o que não é o que seu padrão determina; pode ser o que está estragando as coisas. O uso de NE não é garantido, seja dado o seu padrão de entrada, mas não deve estar causando um problema. Você realmente só precisa de [PT, T = imagem / $ 3] eu acho.

    
por 25.11.2009 / 02:34
0

Você pode nos mostrar o conteúdo da variável $ _GET via print_or ou algo parecido?

    
por 15.11.2009 / 19:42
0

Você também pode nos mostrar a configuração do mod_jk a partir do seu httpd.conf? Não entendo por que você precisa de uma diretiva Alias.

    
por 20.11.2009 / 16:16