我有一些像这样的 Apache 配置:
# Image hotlinking rule
RewriteCond %{HTTP_REFERER} ^http://badsite\.com/
RewriteRule .*/static/artwork/.*\.(jpg|png)$ /static/images/hotlink.png [L]
# Redirects
RewriteRule ^static/artwork/(.+)$ http://cdn.mysite.com/artwork/$1 [L,R=301]
# CodeIgniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
它应该做以下事情:
- 如果图像请求来自
badsite.com
,则阻止它并显示热链接图像。 - 如果收到常规图像请求,则重定向到托管在 cdn 子域上的图像。
- 否则,如果请求不是文件或目录,则加载网页(通过 CodeIgniter)。
但是,我认为第一个RewriteCond
适用于重定向规则,而不是热链接规则,因为来自该引荐来源的图像请求被重定向到 CDN,而不是热链接图像。Apache 文档中的示例(该部分的底部)意味着换行符不再RewriteCond
应用,但是这并没有发生。
有没有办法“重置”RewriteCond
规则,或者我的配置中是否存在其他错误?
答案1
换行符完全无关紧要;RewriteCond
只能应用于一个RewriteRule
;即其正下方的一个。
提供有关您的配置的更多信息将会很有帮助,因为上下文与 Apache 息息相关。但是,从您的第二个RewriteRule
工作情况来看,似乎此配置是在<Directory>
上下文或.htaccess
文件中设置的,并且/static
是该上下文的根源。
鉴于此,你首先RewriteRule
将永远无法匹配。改变你的模式。
.*/static/artwork/.*\.(jpg|png)$
..到..
^static/artwork/.*\.(jpg|png)$