如果条件不匹配,则重写规则

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 在他的评论中提出的重点(我假设您指的是)。只是答案中的“描述”与实际发生的事情相反。创建有效规则时,了解处理顺序很重要。

以上是关于如果条件不匹配,则重写规则的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置url重写

IIS web.config重写规则条件输入内两个捕获组的比较

Nginx重写

如果条件不匹配 SQL,则基于列生成更多行

RewriteCond REQUEST_URI - ^ 没有按预期工作

匹配重写规则的空字符串的正则表达式是啥?