Apache Rewrite 规则正在重写 /libs,即使它在重写条件中被排除在外

Apache Rewrite 规则正在重写 /libs,即使它在重写条件中被排除在外
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteLog "/private/var/log/apache2/rewrite.log"
    RewriteLogLevel 3
    RewriteCond %{REQUEST_URI} !^/etc$  [OR]
    RewriteCond %{REQUEST_URI} !^/libs$ [OR]
    RewriteCond %{REQUEST_URI} !^/bin$  [OR]
    RewriteCond %{REQUEST_URI} !^/home$ [OR]
    RewriteCond %{REQUEST_URI} !^/var$  [OR]
    RewriteCond %{REQUEST_URI} !^/content$ [OR]
    RewriteCond %{REQUEST_URI} !^/siteadmin$
    RewriteRule ^/([^/]*)/([^/]*)/(.*)$  /content/wu/$2_$1/$3 [PT,L]
</IfModule>

答案1

使用 [OR] 与多个“非”(!) 模式意味着每个 URL 都将匹配一个 RewriteCond。

例子:

  • “/foo” 匹配所有“RewriteCond”语句并将命中 RewriteRule。
  • “/etc” 被第一条规则排除,但与所有其他规则匹配(/etc 不是 /libs),因此它也将符合 RewriteRule。
  • /libs、/bin 以及您试图阻止请求的其余内容也是如此。

您可能打算使用默认的 AND 行为。您希望路径不是 /etc AND /libs AND /bin AND /home 等。

相关内容