在一边,我有大约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]