如何通过.htaccess实现带www的HTTP请求跳转至不带www的HTTPS地址
分阶段域名跳转的.htaccess配置方案
配置核心逻辑
Apache mod_rewrite 规则按照从上到下顺序匹配执行,因此需要把跳转规则放在原有伪静态规则之前,确保请求先完成跳转判定,再走伪静态内部路由逻辑。跳转链路严格按照要求拆为两段301永久重定向:
- 第一段:所有
http://www.website.com发起的请求,优先跳转至对应路径的https://www.website.com地址 - 第二段:所有
https://www.website.com发起的请求,再跳转至对应路径的https://website.com最终地址 - 原有基础伪静态规则完全保留,不改动现有路由逻辑
完整可直接替换的配置
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 第一阶段:HTTP协议的www域名请求 强制跳转HTTPS协议的www域名 RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www\.website\.com$ [NC] RewriteRule ^(.*)$ https://www.website.com/$1 [R=301,L] # 第二阶段:HTTPS协议的www域名请求 强制跳转不带www的HTTPS域名 RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www\.website\.com$ [NC] RewriteRule ^(.*)$ https://website.com/$1 [R=301,L] # 原有基础伪静态规则,无需调整 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
注意事项
- 跳转规则中
[NC]标记表示域名匹配时不区分大小写,避免用户输入大写域名时规则失效 [R=301,L]标记里,301是永久重定向状态,能正确传递搜索引擎权重;L是匹配到规则后立刻终止后续规则执行,避免触发规则循环- 规则中
^(.*)$与$1占位符会自动透传用户请求的URL路径、查询参数,不会出现子页面跳转后丢失路径直接跳回首页的问题 - 配置完成后最好先开无痕窗口测试,避免浏览器缓存旧的重定向记录,干扰跳转链路的验证
内容的提问来源于stack exchange,提问作者Muhammed
相关产品推荐
相关产品推荐

