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

.htaccess RewriteCond含环境变量正则匹配:带WWW URL末尾斜杠重定向失效

问题解决:www域名下的末尾斜杠重定向失效

核心问题分析

你的规则有两个关键问题导致www.domain.com/page/无法触发重定向:

  1. 路径范围限定错误:原规则中的RewriteCond %{REQUEST_URI} /public/(.+)/$仅对/public/前缀的路径生效,你的测试URL/page/不在这个范围内,自然不会触发规则(你说domain.com/page/能生效,大概率是实际测试的是/public/page/,或者规则中的这个条件是多余的)。
  2. 主机名匹配逻辑不严谨:原表达式%{HTTP_HOST} -strmatch '(www\\.)?%{ENV:DOMAIN}'是子串匹配而非精确匹配,虽然能匹配到www.domain.com,但结合前面的路径条件,依然无法触发规则。

修正后的.htaccess代码

RewriteEngine On
RewriteBase /

# 仅在生产环境生效:DOMAIN建议通过Apache服务器配置(SetEnv指令)设置,避免硬编码
RewriteCond %{ENV:DOMAIN} !="" [NC]
# 精确匹配带www或不带www的目标域名
RewriteCond %{HTTP_HOST} ^(www\.)?%{ENV:DOMAIN}$ [NC]
# 匹配末尾带斜杠的非根目录路径
RewriteCond %{REQUEST_URI} ^(.+)/$
# 排除实际存在的物理目录(目录默认带斜杠,无需重定向)
RewriteCond %{REQUEST_FILENAME} !-d
# 一次性完成:移除www、移除末尾斜杠、强制HTTPS
RewriteRule ^ https://%{ENV:DOMAIN}%1 [R=301,L]

关键修正说明

  • 移除路径前缀限制:删掉了原规则中/public/的限定,现在所有非根目录的末尾斜杠路径都会被处理。
  • 精确主机名匹配:用^www\.%{ENV:DOMAIN}$和^%{ENV:DOMAIN}$的合并匹配,确保仅处理目标域名的请求,避免影响其他域名。
  • 环境变量校验:增加%{ENV:DOMAIN} !=""条件,确保只有在生产环境设置了DOMAIN变量时规则才生效,适配多环境切换。
  • 简化重定向逻辑:直接用%1捕获无斜杠的路径部分,拼接成最终的HTTPS地址,避免路径拼接错误。

额外建议

不要在.htaccess里硬编码DOMAIN,建议在生产环境的Apache配置文件中通过SetEnv DOMAIN domain.com设置环境变量,这样无需修改.htaccess即可适配不同环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:55:26