我一直试图解决这个问题几个小时,但什么都没有。
在.htaccess内部,每当有人从我网站的文件夹中请求图像时,我都会尝试检查另一个文件夹中是否存在同名文件;如果是,返回该文件;如果没有,请返回最初请求的文件。
看起来很容易,但它根本行不通。 .htaccess代码如下:
RewriteEngine On
RewriteCond /images/blog/watermark/$1 -f
RewriteRule ^(.*) /images/blog/watermark/$1
“RewriteCond”始终返回负数,因此请求的图像始终按原样加载。如果我将其更改为,
RewriteCond %{REQUEST_FILENAME} -f
它总是返回正数,所以它从我想要的文件夹中获取图像 - 除非图像不存在,产生错误,这正是我想要阻止的。
我做错了什么?
感谢。
答案 0 :(得分:1)
RewriteCond
的语法错误。你可能想做更像这样的事情:
RewriteCond ^/images/blog/watermark/(.*) -f
在这种情况下,$1
实际上并不存在,因为RewriteCond
采用正则表达式,而不是替换字符串。因此,Apache正在寻找/images/blog/watermark/$1
而不是/images/blog/watermark/
内的任何文件。
供参考:http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteCond
答案 1 :(得分:1)
我明白了!
显然RewriteCond需要整个目录结构来正确检查文件是否存在。
我在之前在RewriteCond中使用的路径之前添加了%{DOCUMENT_ROOT}并且它有效。
此外,在进一步阅读文档之后,我注意到第一组是$ 0而不是$ 1,从RewriteRule反向引用。
所以最终的代码如下:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/images/blog/watermark/$0 -f
RewriteRule ^(.*) /images/blog/watermark/$1