Elmigo

Рейтинг
7
Регистрация
23.12.2010

>RewriteRule ^$ отлавливается то, что идет до "?", в данном случае ""

допетрил о чем мне хотел сказать Bitman, вам спасибо, ему мои извенения.

Тогда так:
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^$ /index.php [R=301,L]

Словами, наверное, так "если не пустая строка запроса и uri пустой редиректить на /index.php"

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

Тема закрыта.

вроде как L - это "последнее правило" в цепи условий с прерыванем дальнейшей обработки, но вроде в пределах сессии и после перенаправления на новый адрес все правила сначала будут применятся по новой к новому адресу, иначебы у меня не возникло рекурсии в правиле

RewriteCond %{QUERY_STRING} vm=(.*)
RewriteRule ^$ / [R=301,L]

ошибаюсь?

GizmoKoenig:
RewriteCond %{QUERY_STRING} vm=(.*)
RewriteRule ^$ http://loc/index.php?vm=%1 [R=301,L]

Хотя может и так подойдет:
RewriteRule ^$ /index.php [R=301,L]

работают только эти варианты, но работают несколько нестабильно, я для теста написал так RewriteRule ^$ / , мол косячные урлы рулить на морду, но правило таким макаром уходит в рекурсию

(вариант с одной строкой тоже работает, но редиректит / на /index.php - то не айс)

для меня regexp не новое слово, но ^$ крышу сносит, поясните плиз как модреврайт применяет правило пустой строки к непустой строке да еще выцепляет то, что должно быть записано как (.*) ?

ну и собственно почему не возникает рекурсии в вашей первой паре? условие "vm=(.*)" должно сработать равно как для http://site/?vm= так и для http://site/index.php?vm= вроде как корректнее выглядит /\?vm= (русским языком: запрос без index.php)

Elmigo добавил 06.11.2011 в 20:16

Bitman:
Знак вопроса, случаем, не надо подсекать слешем?

Bitman добавил 06.11.2011 в 18:08
А не... всё сложнее. ТС, так вообще не выйдет:

Редирект надо писать в заголовках php.

подсекать надо, но не уверен на счет следующего утверждения, т.к. %{THE_REQUEST} содержит полную строку запроса, т.е. то что упало в лог, к примеру так "GET /index.php?vm=1 HTTP 1.1", наличие такой переменной теоретически как бы отменяет утверждение хотя бы для RewriteCond.