我设置.htaccess文件来路由我的网站请求:
Options -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
现有文件(如图像)的请求正常处理,其他文件转发到路由器。这很好。
我正在尝试使用以下类型的网址来查看缩略图:
http://www.example.com/images/image.png/thumbnail-big/
我的想法是http://www.example.com/images/image.png
是一个有效的网址,并指向一个文件,但缩略图变体不是有效的网址(因为/thumbnail-big/
部分),并由路由器(如果需要,会生成缩略图)。
但这不起作用。处理缩略图URL就好像指向现有文件一样,并且跳过路由器的RewriteRule,但它不是实际文件,因此服务器显示通用404错误。换句话说,"是这条路径的现有文件"对于缩略图URL,条件显然评估为true,即使它不是现有文件。它几乎就像只评估image.png
之前的部分一样。
有没有办法检查文件是否存在以至于我没有得到这种误报?
答案 0 :(得分:0)
将您的条件和规则更改为:
Options -Multiviews
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/$0 !-f
RewriteCond %{DOCUMENT_ROOT}/$0 !-d
RewriteRule .* index.php [L]
使用%{REQUEST_FILENAME}
有时会误导为Apache内部生成文件名的方式。在您的情况下,它正在检查文件,地址为:http://www.example.com/images/image.png