另一方面,我有大约 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 等的工作方式不同。
我分别为每个 Action 添加了
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]
关于apache - 多个 RewriteRule 到一个 RewriteCond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25520448/