Por que o Apache está ignorando minha regra de reescrita?

1

Eu tenho um aplicativo antigo com URLs do formulário ...

http://apps.myserver.com/appname/viewItem.akt?p=123

Estou substituindo esse aplicativo antigo por um que tenha URLs como ...

http://appname.myserver.com/item/123

Eu tentei adicionar várias regras diferentes de reescrita a httpd/httpd.conf e reiniciar o servidor, mas continuo recebendo erros 404.

Algumas coisas que eu tentei ...

RewriteEngine on

RewriteRule ^.*viewItem.akt\?p=([0-9]*)$ http://appname.myserver.com/item/$1 [R]

Ou ...

RewriteRule ^/appname/viewItem.akt\?p=([0-9]*)$ http://appname.myserver.com/item/$1 [R]

O resultado é sempre "O URL solicitado /appname/viewItem.akt não foi encontrado neste servidor", como se a regra de reescrita não estivesse lá.

O que eu estou recebendo no log de acesso é ...

[IP address] - - [09/Sep/2011:21:27:37 -0700] "GET /appname/viewItem.akt?p=1018 HTTP/1.0" 404 248

Eu testei todos os meus regexes em Rubular para verificar se eles correspondem à solicitação recebida.

O que estou perdendo?

Caso seja relevante, o aplicativo antigo era um aplicativo Java em execução no Tomcat e eu tinha um ProxyPass configurado assim ...

(Estou mostrando essas linhas comentadas, como estão quando estou tentando fazer com que a regra de reescrita funcione.)

# ProxyPass /appname http://apps.myserver.com:8080/appname
# ProxyPassReverse /appname http://apps.myserver.com:8080/appname

Mas isso não importa direito? Contanto que minha regra de reescrita corresponda à solicitação, ela deve ser enviada corretamente, não é?

    
por Agvorth 10.09.2011 / 06:38

3 respostas

4

Tente isto:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=([0-9]+)$
RewriteRule ^appname/viewItem.akt$ http://appname.myserver.com/item/%1? [R,L]
  • %1 para retornar a referência à condição de reconfiguração
  • ? no final da substituição para remover o restante da string de consulta

Mas parece que você está misturando mod_rewrite com mod_proxy . Qual versão do Apache você está executando?

    
por 10.09.2011 / 08:45
0

Tem certeza de que mod_rewrite está corretamente carregado?

Caso contrário, usando a diretiva RewriteLog com um acordo RewriteLogLevel deve ajudá-lo a descobrir se sua RewriteRule é levada em conta ao solicitar sua página e se a expressão regular corresponde ou não.

    
por 10.09.2011 / 07:59
0

Eu não sei se isso atende a sua necessidade, mas essas coisas me deixam louco também. Eu sempre tento simplificar o máximo que posso.

Isso parece funcionar nos meus testes:
RewriteRule p=([0-9]*)$ http://appname.myserver.com/item/$1

    
por 10.09.2011 / 08:30