Como eu redireciono index.php APENAS quando não há uma string de consulta?

2

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.

    
por Nick 13.11.2009 / 00:45

4 respostas

3

Aqui está a solução que eu criei:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/index.php$   / [R=301,L]
    
por 13.11.2009 / 11:25
4

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.

    
por 13.11.2009 / 01:36
1

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.

    
por 13.11.2009 / 01:55
0

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: /");
    
por 13.11.2009 / 02:01