Зацикливание в мод_реврайт?

Хочется вот такой вот конфиг иметь, но он естественно уходит в бесконечный цикл. Подскажите как лечить?
# ***********************************************************************
# ***********************************************************************
# ***  Все html, php, htm, tpl и папки (заканчивающиеся на /)         ***
# ***  переадресуем на index.php для обработки ЧПУ и защиты.          ***
# ***  (c) 2012 Mendel AKA Max Dyachenko.                             ***
# ***********************************************************************
# ***********************************************************************
RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteRule ^.*\.html$ /index.php [QSA]
RewriteRule ^.*\.htm$ /index.php [QSA]
RewriteRule ^.*\.tpl$ /index.php [QSA]
RewriteRule ^.*/$ /index.php [QSA]
#
#RewriteCond %{THE_REQUEST} !"^index\.php$"
RewriteRule ^.*\.php$ /index.php [QSA]
  • Вопрос задан
  • 3305 просмотров
Решения вопроса 1
Mendel
@Mendel Автор вопроса
PHP-developer
Решение:
#
RewriteRule ^.*\.html$ /index.php [L,QSA]
RewriteRule ^.*\.htm$ /index.php [L,QSA]
RewriteRule ^.*\.tpl$ /index.php [L,QSA]
RewriteRule ^.*/$ /index.php [L,QSA]
#
RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule ^.*\.php$ /index.php [L,QSA]

отличие от варианта предложенного выше в том что в условии !index\.php$ а не !^index\.php$ т.е. нет ^
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
nazarpc
@nazarpc
Open Source enthusiast
Попробуйте поставить последнюю строчку перед:
RewriteRule ^.*\.html$ /index.php [QSA]
Директивы будут крутиться по кругу, пока на выходе 2 раза не будет получен один и тот же результат.
L всего лишь останавливает текущую итерацию обработки директив mod_rewrite
Ответ написан
alexkbs
@alexkbs
Включите запись полного лога работы mod_rewrite. По логам ошибки такого типа хорошо видно.
Ответ написан
shushu
@shushu
Позвольте уточнить. Зачем перенаправлять отдельно html, tpl…? Какова конечная цель? Если просто организация роутинга, при этом js, img, css и прочее что бы шло напрямуюю то:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?route=$1 [L,QSA]



параметр route, в принципе, можно убрать, и смотреть REDIRECTED_URL header

Суть такая, если файл существует — то загрузка идёт помимо index.php, если нету — попадаем на index.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы