多个RewriteRule到一个RewriteCond

在一边,我有大约40万个子域名。 鉴于以上情况,一些调用也运行子域级别,

subdomain1.example.com/some_action/ 

应该只从域名执行这样的行动有27。

Htaccess文件我创build了一个规则:

 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 

你可以不知何故跳过协调?

每个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]