Исключение файлов из правил перезаписи htaccess

У меня есть настройка перезаписи 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.