我如何重置Apache的RewriteCond指令?

我有一些像这样的Apacheconfiguration:

# 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] 

它应该做到以下几点:

  1. 如果图片请求来自badsite.com ,请将其屏蔽并显示热链接图片。
  2. 如果定期请求映像,则redirect到cdn子域上托pipe的映像。
  3. 否则,如果请求不是文件或目录,则加载一个网页(通过CodeIgniter)。

不过,我认为第一个RewriteCond应用于redirect规则,而不是盗链规则,因为来自该引用者的图像请求被redirect到CDN,而不是盗链图像。 Apache文档 (本节的底部)中的示例意味着换行符会停止RewriteCond应用,但这不会发生。

有没有办法“重置” RewriteCond规则,或者在我的configuration中有一些其他的错误?

换行符是完全无关紧要的; RewriteCond只适用于一个RewriteRule ; 直接在它下面的那个。

提供有关configuration的更多信息将会很有帮助,因为上下文在Apache中是相关的。 但是,从第二个RewriteRule起作用的事实来看,这个configuration似乎是在<Directory>上下文或.htaccess文件中设置的,而/static是在上下文的根上。

鉴于此,您首先将RewriteRule永远不会匹配。 改变你的模式

 .*/static/artwork/.*\.(jpg|png)$ 

..至..

 ^static/artwork/.*\.(jpg|png)$