多个RewriteRule到一个RewriteCond

时间:2014-08-27 06:39:26

标签: apache .htaccess mod-rewrite

另一方面,我有大约400,000个子域名。鉴于上述情况,一些调用也运行子域级,例如..

subdomain1.example.com/some_action/ 

仅应从域执行的此类操作有27个。

Htaccess文件我创建了一条规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example.com
RewriteRule ^some_action1/?$ index.php?some_action1 [L] 

如果我添加此行

RewriteRule ^some_action2/?$ index.php?some_action2 [L]

与some_action3等的工作方式不同。

我已分别为每个动作添加了

RewriteCond %{HTTP_HOST} ^(www.)?example.com

你能以某种方式跳过协调吗?

1 个答案:

答案 0 :(得分:3)

每个RewriteCond条件仅适用于紧随其后的RewriteRule。这意味着如果你有一堆规则,你必须复制条件。如果您确实由于某种原因不想这样做,那么您可以在所有规则的最开始使用否定。这可能是也可能不是一个好的解决方案,因为它可能会影响您未来对规则的更改:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www.)?example.com
RewriteRule ^ - [L]

RewriteRule ^some_action1/?$ index.php?some_action1 [L] 
RewriteRule ^some_action2/?$ index.php?some_action2 [L] 
RewriteRule ^some_action3/?$ index.php?some_action3 [L] 

etc...

因此,第一条规则检查主机的负面信息是example.com,并跳过所有内容。然后,您可以添加所有规则,而无需担心这种情况。

但是,如果你的“some_action”总是成为GET参数的一部分,你可以只使用一个规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?$1 [L]