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

.htaccess中用mod_rewrite测试环境变量的条件判断失效问题

问题原因及解决方案

核心原因

Apache模块的执行顺序导致SetEnv设置的环境变量在mod_rewrite运行阶段不可用:

  • mod_env的SetEnv指令在请求处理的后期阶段设置变量;
  • mod_rewrite的RewriteCond/RewriteRule在请求处理的早期阶段执行,此时MY_SITE变量还未被初始化,所以%{ENV:MY_SITE}读取的值为空,条件自然不匹配。

而你用Header指令能输出MY_SITE的值,是因为Header属于后期执行的模块,此时SetEnv设置的变量已经生效。

解决方案

将apache2.conf中的SetEnv替换为SetEnvIf(mod_setenvif模块的指令,执行阶段早于mod_rewrite),这样mod_rewrite就能正确读取到环境变量:

# apache2.conf 中修改为
SetEnvIf Host .* MY_SITE=stage

额外说明

你之前在.htaccess中添加的这段代码其实无效,因为执行时%{ENV:MY_SITE}为空,规则不会匹配,可以直接删除:

RewriteCond %{ENV:MY_SITE} (.+)
RewriteRule ^ - [E=MY_SITE:%1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:35:13