You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为所有RewriteRule配置统一Httacees RewriteCond,避免重复编写?

为多条RewriteRule共享RewriteCond的可行方案

完全可行,你可以通过以下两种方式避免重复编写相同的RewriteCond:

方法1:使用Apache 2.4+的<If>容器

将所有需要应用该主机头条件的RewriteRule包裹在<If>指令中,一次性定义匹配条件即可:

<If "%{HTTP_HOST} !~ /^www\.domain\.com$/i && %{HTTP_HOST} =~ /^([a-zA-Z0-9]+)\.domain\.com$/i">
    RewriteRule ^$ /index.php?sub_domain=%1  [L,QSA]
    RewriteRule ^login$ /login.php?sub_domain=%1  [L,QSA]
    RewriteRule ^signup$ /signup.php?sub_domain=%1  [L,QSA]
</If>
  • 这里的i修饰符等价于RewriteCond的[NC](忽略大小写)
  • 仅适用于Apache 2.4及以上版本,语法更简洁直观

方法2:通过环境变量传递匹配结果(兼容Apache 2.2+)

先通过一组RewriteCond/RewriteRule捕获子域名并设置环境变量,后续规则只需判断该环境变量是否存在即可:

# 匹配非www的子域名,设置环境变量SUB_DOMAIN
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.com$ [NC]
RewriteRule ^ - [E=SUB_DOMAIN:%1]

# 后续规则复用环境变量
RewriteCond %{ENV:SUB_DOMAIN} !=""
RewriteRule ^$ /index.php?sub_domain=%{ENV:SUB_DOMAIN}  [L,QSA]

RewriteCond %{ENV:SUB_DOMAIN} !=""
RewriteRule ^login$ /login.php?sub_domain=%{ENV:SUB_DOMAIN}  [L,QSA]

RewriteCond %{ENV:SUB_DOMAIN} !=""
RewriteRule ^signup$ /signup.php?sub_domain=%{ENV:SUB_DOMAIN}  [L,QSA]
  • 这种方法兼容更早的Apache版本,通过环境变量传递捕获的子域名值,避免重复编写主机头匹配规则

内容的提问来源于stack exchange,提问作者sami eisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:35:15