цикл перенаправления mod_rewrite - PullRequest
0 голосов
/ 05 февраля 2012

Вот моя структура каталогов:

http://files.example.com/files/

Все файлы находятся в каталоге files /

Я хочу, чтобы URL был http://files.example.com/somefile.txt хотя somefile.txt находится в каталоге files /.

Вот мой файл .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ files/$1

Если кто-то запросит http://files.example.com/somefile.txt, а файл somefile.txt находится вфайлы / каталог, все работает нормально.

Однако, если somefile.txt не существует, это приводит к внутренней ошибке сервера (500), слишком много перенаправлений.

Как я могу отправитьпользователь на страницу 404, если указанный файл не существует?

пример: переход на http://files.example.com/a-file-that-does-not-exist.txt будет перенаправлять на пользовательскую страницу 404, а не на слишком много перенаправлений?

Ответы [ 3 ]

2 голосов
/ 05 февраля 2012

Это работает!

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/files/%{REQUEST_URI} -f
RewriteRule ^(.*)$ files/$1
1 голос
/ 05 февраля 2012

Попробуйте:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/files/
RewriteRule ^(.*)$ /files/$1 [L]

Если файл не существует в / files /, пусть перезапись позаботится о 404, то есть вам не нужны проверки! -D и! -F.

0 голосов
/ 05 февраля 2012

А как же

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond files/%{REQUEST_FILENAME} -f
RewriteRule !^files/(.*)$ files/$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...