Apache服务器HTTPS环境移除URL中www遇问题,http://www.zubizi.com跳转失效求助
解决Apache HTTPS环境下HTTP www地址无法跳转非www的问题
嘿,我来帮你搞定这个小麻烦!你的现有规则其实只覆盖了HTTPS协议下的www跳转,但用户访问http://www.zubizi.com时,这条规则压根没触发——要么是HTTP请求没被Apache的.htaccess规则处理,要么是规则顺序/逻辑没覆盖HTTP场景。
核心问题分析
你的规则只检查了HTTP_HOST是否以www开头,但如果用户走的是HTTP协议(没带https),服务器可能没把这个请求导向HTTPS,或者你的规则没针对HTTP场景做处理,导致跳转失效。
修正后的.htaccess方案
推荐用两种写法,选一种就行:
写法1:分场景处理(更清晰)
RewriteEngine On # 处理HTTP的www地址:http://www.zubizi.com → https://zubizi.com RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # 处理HTTPS的www地址:https://www.zubizi.com → https://zubizi.com RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
写法2:合并规则(更简洁高效)
直接一条规则覆盖HTTP和HTTPS的www跳转:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
关键补充提醒
- 清除浏览器缓存再测试:301永久重定向会被浏览器缓存,之前的错误跳转记录可能干扰测试,先清缓存再访问
http://www.zubizi.com试试。 - 确保mod_rewrite模块启用:如果是Linux服务器,执行
sudo a2enmod rewrite开启模块,然后重启Apache(sudo systemctl restart apache2)。 - 检查虚拟主机配置:不管是HTTP(80端口)还是HTTPS(443端口)的站点配置,都要加上
AllowOverride All,否则.htaccess规则不会生效。比如:
<Directory /var/www/html/zubizi.com> AllowOverride All </Directory>
内容的提问来源于stack exchange,提问作者Sariful
相关产品推荐
相关产品推荐

