Aqui está a solução que eu criei:
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/index.php$ / [R=301,L]
Como faço para criar uma regra de reescrita que corresponda apenas a uma solicitação sem string de consulta?
http://www.mysite.com/index.php
deve remapear para:
http://www.mysite.com/
MAS
http://www.mysite.com/index.php?page=some_page
Deve ser deixado em paz.
Estou tentando isso:
RewriteRule ^/index.php$ http://www.mysite.com/ [R=301,L]
... Mas está combinando com qualquer coisa que comece com /index.php mesmo que eu tenha explicitamente terminado o padrão com um cifrão.
ATUALIZAÇÃO:
As únicas regras anteriores a esta são:
RewriteCond %{HTTP_HOST} ^mysite.com [NC]
RewriteRule ^/(.*) http://www.mysite.com/$1 [R=301,L]
A intenção é redirecionar links não www para a versão www.
A bandeira [L] no primeiro conjunto de regras aqui:
RewriteCond %{HTTP_HOST} ^mysite.com [NC]
RewriteRule ^/(.*) http://www.mysite.com/$1 [R=301,L]
L
means Last - O Apache parará de processar regras para esta iteração quando ela for alcançada.
Remova o sinalizador L
e você deve estar bem.
RewriteCond! % {QUERY_STRING} corresponderia a solicitações sem uma string de consulta.
Você também pode adicionar o seguinte para ativar o log e a depuração do mod_rewrite Registros RewriteLog / rewrite_log RewriteLogLevel 3
Esteja ciente de que isso pode atrasar seu site e preencher seus registros para usá-lo somente para depuração.
Todas essas reescritas são RegExps, que são bastante lentas. Deve ser um pouco mais rápido se você fizer isso de index.php
:
if (!strlen($_SERVER["QUERY_STRING"])) header("Location: /");
Tags mod-rewrite apache-2.2