.htaccess mod_rewrite中的"OR"标志

gab*_*aam 29 apache .htaccess mod-rewrite rewrite apache2

刚发现这个.htaccess重写代码

RewriteEngine on
RewriteCond %{HTTP_HOST} ^my.domain.com$ [NC,OR]
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

war*_*ker 63

来自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...
Run Code Online (Sandbox Code Playgroud)

  • @YzmirRamirez它并不完全相同,Apache的[OR]优先于隐式AND - 大多数编程语言的优先级高于&&而不是|| - 结果例如在C`a && b ||中 c && d`被评估为`(a && b)|| (c && d)`在Apache的mod_rewrite条件下,反之亦然,详细信息请访问/sf/answers/2210040241/ (9认同)
  • 如果您将条件条件语句(如IF)中的子句视为RewriteCond,并将逻辑逻辑“ ||”作为标志“ [OR]”,那么对程序员来说是有意义的。 (3认同)

Boz*_*Boz 5

当您想要一个或另一个或另一个条件触发重写规则时,请使用 [OR]。否则,默认行为为“AND”。所有 RewriteCond 都必须为 true 才能触发规则。