.htaccess配置:HTTP转HTTPS与泛域名重定向共存问题
解决方案:让HTTPS重定向与泛域名代理规则共存
问题根源
- 原HTTPS重定向规则的条件错误(
%{HTTP_HOST} off),无法正确识别HTTP请求; - 规则顺序颠倒,泛域名代理规则在HTTPS重定向之前执行,导致HTTP请求直接被代理到HTTP目标地址,最终被浏览器或服务器强制转为HTTPS目标,跳过了泛域名的HTTPS跳转;
- 泛域名代理目标使用HTTP协议,存在混合内容风险,也不符合当前HTTPS优先的要求。
正确的.htaccess配置
# 1. 优先将所有HTTP请求重定向到同域名的HTTPS(永久重定向) RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 2. 处理泛域名代理:将非www的泛域名请求代理到主域名指定路径 RewriteCond %{HTTP_HOST} !^www\.example\.com$ RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ RewriteRule ^ https://example.com/account/company/%1%{REQUEST_URI} [P,L,QSA] # 3. 前端控制器:转发不存在的文件/目录请求到index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L]
配置说明
- HTTPS重定向:通过
%{HTTPS} off准确识别HTTP请求,重定向到同域名的HTTPS地址,[L]确保执行完此规则后停止后续规则,R=301标记为永久重定向,有利于搜索引擎优化。 - 泛域名代理:先排除
www.example.com,再匹配泛域名前缀(如name),将请求代理到HTTPS的目标路径,%{REQUEST_URI}保留原请求的路径参数,QSA确保查询参数不会丢失,[P]启用反向代理,[L]停止后续规则。 - 前端控制器:仅当请求的文件或目录实际不存在时,才转发到
index.php,适配大多数PHP框架的路由机制。
内容的提问来源于stack exchange,提问作者gambi
相关产品推荐
相关产品推荐

