apache - 多个 RewriteRule 到一个 RewriteCond

标签 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 等的工作方式不同。

我分别为每个 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/

相关文章:

apache - .htaccess 500 错误 - 内部重定向循环

javascript - 如何检查 prerender.io 在我的 angularjs 网站上是否正常工作?

regex - RewriteCond 文件存在

php - 一些重定向翻译不正确,而大多数都按预期工作

linux - 尝试在本地 Apache 服务器上运行 python 脚本时出现错误 500

apache - Oracle + NiFi => 所有字段转换为字符串

apache - 如何编写 htaccess 重定向甚至目录存在

php - 缓存,PHP 生成的缩略图加载缓慢

apache - 使用 .htaccess 甚至对经过身份验证的用户隐藏文件

apache - 面向 SaaS 产品客户的自定义域功能