我有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中完成。有人可以让我知道怎么做吗?
答案 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]