如何在htaccess中执行:如果文件夹中存在文件,请提供,如果没有,请提供blank.html

时间:2011-07-19 14:48:32

标签: .htaccess mod-rewrite

我有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 个答案:

答案 0 :(得分:4)

这应该适合你:

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/.*,因为.htaccess中的网址没有前导斜杠/在RewriteRule中匹配(除非这些规则在服务器/虚拟主机上下文中声明,而不是.htaccess)。

2)我不会说我100%肯定(仅99.99%),但这两行是相同的:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f

答案 1 :(得分:0)

这对我有用:

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