.htaccess未实现HTTP转HTTPS跳转,子域丢失问题求助
问题
- 当以HTTP而非HTTPS访问链接
https://legacy.dhnn.com/wip/ypf/ruta-nube/ypf-ruta-contado.html时,子域名“legacy”会丢失。 - 尝试配置
.htaccess但无效,且wip目录下有大量网站,不想为每个站点单独创建.htaccess文件,询问是否可行。 - 验证以下
.htaccess代码是否正确:
RewriteEngine on RewriteCond %{HTTP_HOST} ^dhnn.com [NC] RewriteRule ^(.*)$ http://legacy.dhnn.com/$1 [R=301,L] RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://legacy.dhnn.com/$1 [R,L]
分析与解决方案
现有代码的问题
- 重复声明
RewriteEngine On:仅需开启一次即可,重复配置可能引发规则执行异常。 - 覆盖场景不完整:第一条规则仅处理裸域名
dhnn.com的跳转,未覆盖直接访问http://legacy.dhnn.com的场景;第二条规则强制跳转到legacy.dhnn.com,会导致wip下其他子域名站点被错误重定向。 - 协议跳转不统一:第一条规则跳转后仍使用HTTP,未同步强制HTTPS,无法解决原问题中HTTP访问丢失子域名的核心问题。
优化后的统一配置(无需为每个站点单独创建.htaccess)
在主域名根目录的.htaccess中添加以下配置,即可同时解决子域名丢失、HTTP转HTTPS的问题,且兼容wip下所有站点:
RewriteEngine On # 处理裸域名跳转至legacy子域名并强制HTTPS RewriteCond %{HTTP_HOST} ^dhnn\.com$ [NC] RewriteRule ^(.*)$ https://legacy.dhnn.com/$1 [R=301,L] # 将所有HTTP请求转至对应HTTPS地址,保留原主机名(含子域名) RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
关键说明
- 第一条规则针对用户访问裸域名
dhnn.com的场景,强制跳转到legacy.dhnn.com并使用HTTPS,从源头避免子域名丢失。 - 第二条规则通过
%{HTTP_HOST}变量保留原请求的完整主机名(包括各种子域名),将所有HTTP请求统一转为HTTPS,无需为wip下每个站点单独配置。 - 生产环境建议使用
R=301永久重定向(利于SEO),测试阶段可改用R=302临时重定向,确认规则生效后再切换。 - 确保服务器已启用
mod_rewrite模块,否则规则无法执行。
内容的提问来源于stack exchange,提问作者Leandro Sebastián Ferrara
相关产品推荐
相关产品推荐

