如果条件不匹配,则重写规则
Posted
技术标签:
【中文标题】如果条件不匹配,则重写规则【英文标题】:Rewrite rule if condition is not matched 【发布时间】:2011-07-18 03:47:58 【问题描述】:如果 URL 不 与路径“论坛”匹配,我该如何执行规则?
例如:
RewriteCond IF URL IS NOT forums
RewriteRule !\.(js|gif|css|jpg|png)$ %DOCUMENT_ROOT/index.php [L]
【问题讨论】:
【参考方案1】:Apache 的RewriteCond
以及RewriteRule
指令支持感叹号来指定不匹配的模式:
您可以在模式字符串前面加上 一种 '!'字符(感叹号)到 指定一个不匹配的模式。
这应该可行:
RewriteCond %REQUEST_URI !^/forums.*
RewriteRule !\.(js|gif|css|jpg|png)$ /index.php [L]
--> 将所有不以 forums 开头且不以所列内容结尾的请求重定向到 index.php
【讨论】:
值得注意的是,处理顺序是(1)检查RewriteRule是否有匹配的模式,然后,只有匹配:(2)回到第一个关联的RewriteCond,检查是否火柴。 (并继续任何后续的 RewriteConds)。所以在上面的例子中,时间顺序的描述是对于所有不以 (.js, .gif, .css, .jpg, .png) ... 结尾的请求,它们的 URL 不以“/forums”开头.. . 转发到 index.php(并且,根据 [L],忽略任何可能影响请求的后续 RewriteRules。)HTH :) @cweekly 这似乎是 IIS mod_rewrite 的情况 - 这对于 apache mod_rewrite 也是如此吗? The rule is only used if both the current state of the URI matches its pattern, and if the conditions are met. 那么为什么顺序很重要呢? @cweekly 谢谢你,我一直在摸不着头脑,为什么我之前有无限重定向 @TamásBolvári 在此示例中,顺序可能无关紧要,但这不是 cweekly 在他的评论中提出的重点(我假设您指的是)。只是答案中的“描述”与实际发生的事情相反。创建有效规则时,了解处理顺序很重要。以上是关于如果条件不匹配,则重写规则的主要内容,如果未能解决你的问题,请参考以下文章
IIS web.config重写规则条件输入内两个捕获组的比较