0

我已经尝试解决这个问题好几个小时了,但一无所获。

在 .htaccess 中,每当有人从我网站的文件夹中请求图像时,我都会尝试检查另一个文件夹中是否存在同名文件;如果是,则返回该文件;如果没有,则返回最初请求的文件。

这似乎很容易,但它根本行不通。.htaccess 代码如下:

RewriteEngine On

RewriteCond /images/blog/watermark/$1 -f
RewriteRule ^(.*) /images/blog/watermark/$1

“RewriteCond”总是返回负数,所以请求的图像总是按原样加载。如果我将其更改为,例如,

RewriteCond %{REQUEST_FILENAME} -f

它总是返回正数,因此它从我想要的文件夹中获取图像 - 除非图像不存在,生成错误,这正是我想要防止的。

我究竟做错了什么?

谢谢。

4

2 回答 2

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

于 2010-05-12T18:42:15.160 回答
1

我得到了它!

显然 RewriteCond 需要整个目录结构来正确检查文件是否存在。

我在我之前在 RewriteCond 中的路径之前添加了 %{DOCUMENT_ROOT} 并且它有效。

此外,在进一步阅读文档后,我注意到当从 RewriteRule 反向引用时,第一组是 $0 而不是 $1。

所以最终的代码如下:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/images/blog/watermark/$0 -f 
RewriteRule ^(.*) /images/blog/watermark/$1 
于 2010-05-12T19:13:17.003 回答