mod_rewrite RewriteRule não está funcionando

1

Este é um follow-up desta pergunta: Reescreva o URL - como obter o nome do host e o caminho?
E uma cópia disso: mod_rewrite RewriteRule não está funcionando

Eu tenho esta Regra de Regravação:

RewriteEngine On
RewriteRule ^(http://[-A-Za-z0-9+&@#/%=~_|!:,.;]*)/([-A-Za-z0-9+&@#/%=~_|!:,.;]*)\?([A-Za-z0-9+&@#/%=~_|!:,.;]*)$ http://www.xmldomain.com/bla/$2?$3&rtype=xslt&xsl=$1/$2.xsl

parece estar correto e exatamente o que eu preciso. Mas isso não funciona no meu servidor. Eu recebo um erro de 404 páginas não encontrado.

mod_rewrite está ativado, pois a seguinte regra simples está funcionando bem:

 RewriteEngine On
 RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

Você pode ajudar?

Obrigado

    
por big_p 21.05.2010 / 12:12

1 resposta

2

De acordo com a documentação, por padrão

The Pattern will initially be matched against the part of the URL after the hostname and port, and before the query string. If you wish to match against the hostname, port, or query string, use a RewriteCond with the %{HTTP_HOST}, %{SERVER_PORT}, or %{QUERY_STRING} variables respectively.

Portanto, você não pode extrair o nome do host nem a string de consulta dessa maneira. A maneira simples é usar as variáveis de servidor %{HTTP_HOST} e %{QUERY_STRING} na regra de reescrita:

RewriteRule ^/(.*)$ http://www.xmldomain.com/bla/$1?%{QUERY_STRING}&rtype=xslt&xsl=%{HTTP_HOST}/$1.xsl

EDITAR

Se você quiser testar o URL completo, use RewriteCond desta forma (observe o sinal % em vez do sinal $ na regra de reconfiguração):

RewriteCond %{HTTP_HOST}/%{REQUEST_URI}&%{QUERY_STRING} ...pattern...
RewriteRule . http://www.xmldomain.com/bla/%2?%3&rtype=xslt&xsl=%1/%2.xsl
    
por 21.05.2010 / 15:43