Как это сделать в htaccess: если файл в папке существует, подайте его, если нет, предоставьте blank.html - PullRequest
1 голос
/ 19 июля 2011

У меня есть файл htaccess, который перенаправляет все запросы на index.php, чтобы система CMS могла проанализировать запрос и предоставить ответ. Однако по понятным причинам это не подходит для файлов, которые действительно существуют по запрошенному пути (в данном случае это файлы, загруженные пользователями с помощью редактора fck), поэтому у меня есть одно из правил в htaccess:

RewriteRule ^(.*)/fck/(.*) - [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
RewriteRule ^.*$ - [L]

Это прекрасно работает, но проблема в том, что теперь мне нужно создать противоположное правило: то есть, когда файл из папки /fck/ НЕ существует, затем вернуть пустое значение (или не найдено, или как мы хотим его вызвать) и не мешайте CMS с этим.

Это должно быть легко (ну, хорошо, легко звучит глупо, когда приходится задавать этот вопрос, но я совсем не специалист по htaccess ..), выполненное в htaccess. Может кто-нибудь, пожалуйста, дайте мне знать, как это сделать?

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

Это должно сделать работу за вас:

RewriteEngine On
RewriteBase /

# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

# return /blank.php if no such file or folder in /fck/
RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^.*/fck/.* /blank.php [L]
# or use below line instead of the above line (comment and uncomment accordingly)
# it will display 404 page (using 404 handler from your config: e.g. ErrorDocument 404 /404.php)
#RewriteRule ^.*/fck/.* - [R=404,L]

# your CMS rewrite rules go below

ПРИМЕЧАНИЯ:

1) Этот шаблон ^.*/fck/.* предполагает, что fck папка является подпапкой (например, example.com/one/fck/icon.png).Если папка fck находится в корне веб-сайта (т.е. example.com/fck/icon.png), шаблон необходимо изменить на ^fck/.*, так как URL-адреса в .htaccess не имеют косой черты / при сопоставлении в RewriteRule (если только эти правилаобъявлены в контексте сервера / виртуального хоста, а не .htaccess).

2) Я не скажу, что в этом я уверен на 100% (только 99,99%), но эти 2 строки одинаковы:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
0 голосов
/ 09 января 2015

Это работает для меня:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*) $1 [QSA,L]
...