如何重置 Apache 的 RewriteCond 指令?

如何重置 Apache 的 RewriteCond 指令?

我有一些像这样的 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]

它应该做以下事情:

  1. 如果图像请求来自badsite.com,则阻止它并显示热链接图像。
  2. 如果收到常规图像请求,则重定向到托管在 cdn 子域上的图像。
  3. 否则,如果请求不是文件或目录,则加载网页(通过 CodeIgniter)。

但是,我认为第一个RewriteCond适用于重定向规则,而不是热链接规则,因为来自该引荐来源的图像请求被重定向到 CDN,而不是热链接图像。Apache 文档中的示例(该部分的底部)意味着换行符不再RewriteCond应用,但是这并没有发生。

有没有办法“重置”RewriteCond规则,或者我的配置中是否存在其他错误?

答案1

换行符完全无关紧要;RewriteCond只能应用于一个RewriteRule;即其正下方的一个。

提供有关您的配置的更多信息将会很有帮助,因为上下文与 Apache 息息相关。但是,从您的第二个RewriteRule工作情况来看,似乎此配置是在<Directory>上下文或.htaccess文件中设置的,并且/static是该上下文的根源。

鉴于此,你首先RewriteRule将永远无法匹配。改变你的模式。

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

..到..

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

相关内容