Использование измененного RewriteCond для проверки наличия файла в нескольких местах - PullRequest
3 голосов
/ 29 мая 2010

Я хочу использовать mod-rewrite, чтобы проверить файл в двух разных местах: по запрошенному URL и по запрошенному URL в общедоступном каталоге.

Вот что у меня есть:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f  #this line isn't working
RewriteRule ^(.*)$ index.php?$1 [L]

Он может правильно определить, существует ли файл, но не правильно определяет, находится ли файл по адресу /public/supplied/file/path/file.extension. Как мне проверить это?

1 Ответ

4 голосов
/ 29 мая 2010

Я действительно понял, что проблема в том, что public / не находится в корневом каталоге. Он находится в том же каталоге, в котором находится .htaccess. Есть ли способ получить каталог, в котором находится .htaccess, поэтому он может работать в разных местах, не требуя ручного изменения .htaccess для каждого?

Вы можете сделать это подзапросом. Флаг -F будет относить относительные пути относительно каталога, в котором находится .htaccess. Итак:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond public/$0 !-F
RewriteRule ^(.*)$ index.php?$1 [L,B]

Обратите внимание, что -F подразумевает большее снижение производительности, чем -f, так как вместо просто статистики генерируется подзапрос. Вам также следует добавить флаг B, чтобы избежать обратной ссылки.

...