Как запретить Apache / mod_rewrite рассматривать путь как файл с тем же именем

Я использую сервер WAMP, в основном настроенный как есть из коробки. У меня проблемы с тем, чтобы mod_rewrite вела себя так, как ожидалось, локально (на рабочем сервере все работает нормально).

У меня есть файл PHP, расположенный по адресу:/ajax/graphs/get-graph.php

Этот файл обычно вызывается с помощью файла начальной загрузки, загруженного/index.php

У меня есть файл.htaccess в корне со следующими правилами:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]

Так что, в основном, когда мое приложение запрашивает через AJAX вызов /ajax/graphs/get-graph/это должно быть направлено на /index.php,

Проблема в том, что Apache/mod_rewrite видит путь запроса и загружает /ajax/graphs/get-graph.php непосредственно.

Как я могу предотвратить Apache от предположения, что /ajax/graphs/get-graph/ является допустимым файлом, потому что в этом месте существует php-файл с таким же именем?

1 ответ

Решение

Похоже, вы попали в ловушку согласования контента;-) Как объясняется в документации по Apache, есть опция под названием MultiViews что, когда включено, заставляет Apache в основном преобразовывать несуществующие имена каталогов в соответствующие им имена файлов.

Эффект MultiViews заключается в следующем: если сервер получает запрос на /some/dir/foo, если /some/dir имеет MultiViews включен, и /some/dir/foo не существует, то сервер читает каталог в поисках файлов с именем foo.*и эффективно подделывает карту типов, которая называет все эти файлы...

Смысл в том, что вы можете иметь несколько версий файла в разных форматах или на разных языках, например

/some/dir
- foo.en.gif
- foo.en.png
- foo.en.jpg
- foo.fr.gif
- foo.fr.png
- foo.fr.jpg

и Apache выберет лучший, основываясь на предпочтениях браузера.

Чтобы это исправить, все, что вам нужно сделать, это добавить директиву

Options -MultiViews

в <Directory> или же <Location> блок, соответствующий /ajax/graphs, Или, если у вас нет доступа к основной конфигурации сервера, вы можете поместить его в /ajax/graphs/.htaccess,

Другие вопросы по тегам