【问题标题】: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]

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案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 也是如此吗?
    • @cweekly 谢谢你,我一直在摸不着头脑,为什么我之前有无限重定向
    • @TamásBolvári 在此示例中,顺序可能无关紧要,但这不是 cweekly 在他的评论中提出的重点(我假设您指的是)。只是答案中的“描述”与实际发生的事情相反。创建有效规则时,了解处理顺序很重要。
    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2018-02-01
    • 2020-01-18
    • 2018-04-26
    • 1970-01-01
    • 2011-10-02
    • 2013-04-08
    相关资源
    最近更新 更多