一组RewriteConds

时间:2015-10-09 05:01:31

标签: apache .htaccess mod-rewrite

我们已经尝试了stackoverflow的所有建议,我们可以找到为同一组RewriteConds添加多个RewriteRules,但在所有情况下,我们只能让第一个RewriteRule工作。 这是我们想要添加更多类别的单个重写的工作代码:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /designers/$1 [NC,L]
</IfModule>

以下都不起作用:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /designers/$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /labels/$1 [NC,L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  .?  -  [S=2]
RewriteRule ^(.*)$ /designers/$1 [NC,L]
RewriteRule ^(.*)$ /labels/$1 [NC,L]
</IfModule>

1 个答案:

答案 0 :(得分:1)

你的[OR] cond几乎是正确的。当你进行逻辑反转时,你也必须否定。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule  .?  -  [S=2]
RewriteRule ^(.*)$ /designers/$1 [NC,L]
RewriteRule ^(.*)$ /labels/$1 [NC,L]

所以你不想要!-f,你需要-f。请注意,S=2会跳过 2 规则。如果您有更多类别,则需要更改它,或者只使用L标志。