У меня есть настройка перезаписи htaccess в моем приложении PHP для маршрутизации файлов через файл bootstrapper. По сути, цель состоит в том, чтобы получить URL-адрес, например, www.domain.com/view/key/value/key/value, где будет маршрутизироваться представление, и пары ключ / значение будут доступны через функцию, которую я написал в загрузчике к представлениям. Все работало хорошо …
То есть, пока я не начал заниматься ajax-y. Я направляю все свои запросы ajax через один файл ajaxDispatcher.php. Когда я это сделал, htaccess (правильно) поймал запрос и использовал мой загрузчик, чтобы направить его ненадлежащим образом. Точно так же он пытался маршрутизировать нежелательные файлы, такие как .ico, .css и т. Д.
Я выяснил исключение маршрутизации расширения файла, однако, я не смог .htaccess игнорировать правила перезаписи для одного файла ajaxDispatcher.php. Вот где мой код стоит:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/ajaxDispatcher.php$ $0 [L] RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php?route=$1 [L]
Как получить .htaccess, чтобы игнорировать правила маршрутизации только для ajaxDispatcher?
Вы должны перенести свое новое правило поверх блока RewriteCond:
RewriteRule ^/?ajaxDispatcher.php$ - [L]
В противном случае RewriteConditions больше не охватывают расширения RewriteRule, для которых я предполагаю, что они предназначены.
Другой вариант – превратить его в другой RewriteCond, конечно:
RewriteCond %{SCRIPT_NAME} !ajaxDispatcher
Или вводя его в качестве утверждения в окончательный RewriteRule (?!ajaxDispatcher.php)
.
Самое упорядоченное предложение лучше всего описано в Serverfault: https://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-as
Если вы удалите строку ajaxDispatcher.php
из кода, который вы показываете, он должен работать – из-за правил !-f
и !-d
, запросы к существующим файлам будут исключены из перезаписи rewrite.