.htaccess mod_rewrite 中的“或”标志

Posted

技术标签:

【中文标题】.htaccess mod_rewrite 中的“或”标志【英文标题】:"OR" Flag in .htaccess mod_rewrite 【发布时间】:2012-09-11 04:15:59 【问题描述】:

刚找到这个.htaccess重写代码

RewriteEngine on
RewriteCond %HTTP_HOST ^my.domain.com$ [NC,OR]
RewriteCond %REQUEST_URI !public/
RewriteRule (.*) /public/$1 [L]

我想知道“OR”标志的目的是什么。 已经检查了文档http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteflags,但找不到任何信息。

有什么想法吗?

【问题讨论】:

[OR] 是 RewriteCond 标志,而不是 RewriteRule 标志。 【参考方案1】:

[OR] 用于当您想要一个或另一个或另一个条件时触发重写。 否则默认行为是'AND' 所有的 RewriteConds 都必须为真才能触发规则。

【讨论】:

【参考方案2】:

来自http://httpd.apache.org/docs/current/mod/mod_rewrite.html

ornext|OR(或下一个条件) 使用它来将规则条件与本地 OR 而不是隐式 AND 组合。典型例子:

RewriteCond %REMOTE_HOST  ^host1  [OR]
RewriteCond %REMOTE_HOST  ^host2  [OR]
RewriteCond %REMOTE_HOST  ^host3
RewriteRule ...some special stuff for any of these hosts...

【讨论】:

如果您将RewriteCond 视为条件语句中的子句,例如IF,而将标志[OR] 视为逻辑||,那么这对程序员来说是有意义的。 @YzmirRamirez 不完全一样,Apache 的 [OR] 的优先级高于隐式 AND - 大多数编程语言的 && 优先级高于 || - 结果,例如在 C 中 a && b || c && d 被评估为 (a && b) || (c && d) 而在 Apache 的 mod_rewrite 条件下反之亦然,详情请点击此处 ***.com/a/31572003/895077

以上是关于.htaccess mod_rewrite 中的“或”标志的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 和 mod_rewrite 出错

子域 mod_rewrite (htaccess) 到相对目录

将 .htaccess 转换为 nginx (mod_rewrite)

没有 mod_rewrite 的漂亮 URL,没有 .htaccess

使用 .htaccess 和 mod_rewrite 强制 SSL/https

.htaccess 新手问题使用 mod_rewrite