Как сделать так, чтобы флаг -f применялся к каталогам с косой чертой? - PullRequest
1 голос
/ 08 февраля 2010

Я создаю .htaccess файл с довольно сложным набором правил.

Одно из основных правил переписывания - это первая строка:

Если запрошенный файл существует физически, перезапись отсутствует, прекратите обработку правил.

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]

это хорошо работает с одним исключением: когда я обращаюсь к каталогу с завершающим слешем

www.example.com/directory/

directory не будет распознан как существующий, тогда как

www.example.com/directory

будет.

Что я могу сделать, чтобы Apache распознал также существующие каталоги с косой чертой?

Справочная информация, я уже добавляю завершающий слеш к каждому запросу, выполненному без одного (для удовлетворения как /directory, так и /directory/ запросов.

1 Ответ

1 голос
/ 08 февраля 2010
RewriteCond %{REQUEST_FILENAME} -d

-d обозначает каталог. Кроме того, согласно скрытым функциям mod_rewrite , директива [L] не работает в файлах .htacess, только если вы поместите ее в свои файлы apache conf.

Также, если вы просто начинаете с:

RewriteEngine on
# Dont rewrite files or directories which actually exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Вы можете избежать перезаписи любых существующих файлов или каталогов. Ваши существующие правила говорят: «Если это реальный файл, продолжайте», тогда как мои говорят: «Если это не реальный файл и не настоящий каталог, продолжайте».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...