Назад | Перейти на главную страницу

Как перенаправить index.php ТОЛЬКО при отсутствии строки запроса?

Как мне создать правило перезаписи, которое соответствует только запросу без строки запроса?

http://www.mysite.com/index.php

следует переназначить на:

http://www.mysite.com/

НО

 http://www.mysite.com/index.php?page=some_page

Следует оставить в покое.

Я пробую это:

RewriteRule ^/index.php$   http://www.mysite.com/ [R=301,L]

... Но он соответствует всему, что начинается с /index.php, хотя я явно закончил шаблон знаком доллара.

ОБНОВИТЬ:

Единственные правила перед этим:

 RewriteCond %{HTTP_HOST}   ^mysite.com [NC]
 RewriteRule ^/(.*)         http://www.mysite.com/$1 [R=301,L]

Намерение состоит в том, чтобы перенаправить ссылки без www на версию с www.

Флаг [L] на первом наборе правил здесь:

RewriteCond %{HTTP_HOST}   ^mysite.com [NC]
RewriteRule ^/(.*)         http://www.mysite.com/$1 [R=301,L]

L означает Last - Apache прекратит обработку правил для этой итерации, когда она будет достигнута.

Удалить L флаг, и все будет в порядке.

Вот решение, которое я придумал:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/index.php$   / [R=301,L]

RewriteCond! % {QUERY_STRING} будет соответствовать запросам без строки запроса.

Вы также можете добавить следующее, чтобы включить ведение журнала и отладку журналов mod_rewrite RewriteLog / rewrite_log RewriteLogLevel 3

Имейте в виду, что это может замедлить работу вашего сайта и заполнить журналы, поэтому используйте его только для отладки.

Все эти перезаписи - это регулярные выражения, которые работают довольно медленно. Это должно быть немного быстрее, если вы сделаете это из index.php:

if (!strlen($_SERVER["QUERY_STRING"])) header("Location: /");