在匹配的RewriteCond上停止执行Mod_Rewrite

时间:2008-10-23 08:53:17

标签: mod-rewrite

我在IIS上运行Helicon ISAPI Rewrite的免费版本,并且有几个站点运行相同的重写规则集。直到现在这已经很好,因为所有规则都适用于所有网站。我最近添加了一个新网站,我不想贯穿所有规则。在执行自己的规则后,有没有办法让这个站点的请求突破规则集。

我试过以下没有运气;所有对mysite.com的请求都会产生404.我想我正在寻找的是一条什么都不做的规则,并被标记为执行[L]的最后一条规则。

## New site rule for mysite.com only
RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule  /content([\w/]*)   /content.aspx?page=$1 [L]

## Break out of processing for all other requests to mysite.com
RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule (.*) - [L]

## Rules for all other sites
RewriteRule ^/([^\.\?]+)/?(\?.*)?$ /$1.aspx$2 [L]
...

4 个答案:

答案 0 :(得分:9)

我做了类似的事情,在WebDAV文件夹上停止mod_rewrite:

# stop processing if we're in the webdav folder
RewriteCond %{REQUEST_URI} ^/webdav [NC]
RewriteRule .* - [L]

这也适用于您的目的。如果没有,或者您对其他参考文献感兴趣,请参阅上一个问题:How do I ignore a directory in mod_rewrite?

答案 1 :(得分:1)

将其重写为自己?

RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule ^(.*)$ $1 [QSA,L]

答案 2 :(得分:1)

我不知道ISAPI重写语法,但在IIRF上,“突破”规则是这样的:

## Break out of processing for all other requests to mysite.com
RewriteCond %{SERVER_NAME}  ^(?:www\.)?mysite\.com$
RewriteRule (.*) - [L]

## Break out of processing for all other requests to mysite.com
RewriteCond %{HTTP_HOST}  ^(?:www\.)?mysite\.com$
RewriteRule (.*) - [L]

在每种情况下,规则都说“不要重写(并且不再处理任何规则)”,当使用的主机名是mysite.com或www.mysite.com时,它适用。 [L]标志是表示“不再处理任何规则”的部分,而 - 替换是表示“不重写”的部分。

答案 3 :(得分:0)

RewriteRule ^ - [END]

  • .不正确,因为它至少需要1个字符
  • .* 可能效率低下恕我直言
  • L比END更差,因为它允许额外的轮次,也可以在内部重定向上。只有END才真正停止。 →Details