.htaccess Rewrite - выдает ошибку, если файл существует с тем же именем, что и параметр - PullRequest
4 голосов
/ 17 января 2012

У меня возникли небольшие проблемы с правилом переписывания, которое после поиска в Google ни к чему не привело.У меня есть стандартная перезапись настройки URL, например:

RewriteRule ^services/(.*)/ /services/index.php?content=$1 [L]

Сайт использует значение content для запроса соответствующего контента из БД, но просто делает URL красивее;стандартные вещи.Это работает в определенной степени.Если, например, мой URL us /services/testimonials/, то правило работает нормально;содержимое загружается и страница отображается нормально.Однако то, что я видел с некоторыми URL-адресами (например, /services/training/), было ошибкой, в которой говорилось:

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0 Fatal error: Unknown: Failed opening required 'redirect:/services/index.php' (include_path='[removed]') in Unknown on line 0

После долгих поисков и ударов головой (с небольшим прогрессом от любого из них) я обнаружил, что если я изменю URL-адрес на/services/Training/ (обратите внимание на заглавную T) это сработало.Это быстро привело меня к мысли о конфликте в URL с чем-то (о чем я, вероятно, должен был подумать первым в ретроспективе).После проверки того, какие URL работали, а какие нет, я соединил точки и обнаружил, что у сломанных URL были файлы с таким же именем в подкаталогах, что и URL.Это предложение сбивает с толку.По сути, я не могу использовать URL /services/training/, поскольку существует файл /services/training.php, который вызывает возврат ошибки.

Существует очевидное исправление, которое заключается в переименовании файлов, конфликтующих с URL-адресами.но есть ли способ в правиле перезаписи, где я могу заставить его игнорировать любые файлы с таким же именем, которые он может найти?

1 Ответ

6 голосов
/ 17 января 2012
Options -MultiViews

Это должно помешать отображению URL в training.php. Это, однако, не помешает /services/training.php не отображать, но это не будет проблемой, я полагаю.

...