Ubuntu Server中Apache2配置WWW转非WWW及HTTP转HTTPS重定向异常求助
Ubuntu Server中Apache2配置WWW转非WWW及HTTP转HTTPS重定向异常求助
看起来你现在卡在Apache2的重定向规则上了,目标是把所有流量统一到https://website.com,但目前的配置没处理好WWW到非WWW的跳转,尤其是HTTPS下的WWW请求没被正确转过去,我来帮你梳理下问题和调整方案:
当前配置的核心问题
- 80端口(HTTP)的规则:只是把HTTP请求转到同主机名的HTTPS地址,比如
http://www.website.com会被转到https://www.website.com,而不是直接跳转到非WWW的HTTPS目标 - 443端口(HTTPS)的规则:完全没有处理WWW转非WWW的逻辑,所以当用户直接访问
https://www.website.com时,不会触发任何重定向,就停留在带WWW的地址上了
调整后的配置方案
1. 修改front.conf(80端口配置)
把所有HTTP请求直接一步到位重定向到https://website.com,避免多余跳转:
<VirtualHost *:80> ServerName website.com ServerAlias www.website.com ServerAdmin webmaster@localhost DocumentRoot /var/www/... ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine On # 匹配所有HTTP请求(带/不带WWW),直接重定向到HTTPS非WWW地址 RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC] RewriteRule ^ https://%2%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>
规则说明:%{HTTP_HOST} ^(www\.)?(.*)$会捕获主机名的两个部分,%2就是去掉www.后的核心域名(也就是website.com),最终直接跳转到目标地址。
2. 修改front-le-ssl.conf(443端口配置)
添加HTTPS下的WWW转非WWW规则,处理用户直接访问https://www.website.com的场景:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName website.com ServerAlias www.website.com ServerAdmin webmaster@localhost DocumentRoot /var/www/... ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine On # 匹配HTTPS下的WWW域名,重定向到非WWW地址 RewriteCond %{HTTP_HOST} ^www\.website\.com$ [NC] RewriteRule ^ https://website.com%{REQUEST_URI} [END,NE,R=permanent] Include /etc/letsencrypt/... SSLCertificateFile /etc/letsencrypt/... SSLCertificateKeyFile /etc/letsencrypt/... </VirtualHost> </IfModule>
规则说明:用RewriteCond精准匹配带WWW的HTTPS请求,重定向到目标域名,[END]标记可以避免触发循环重定向。
后续操作
- 修改完配置后,重启Apache2生效:
sudo systemctl restart apache2 - 测试重定向效果,可以用
curl命令验证:
正常情况下,所有请求的# 测试HTTP带WWW curl -I http://www.website.com # 测试HTTP不带WWW curl -I http://website.com # 测试HTTPS带WWW curl -I https://www.website.comLocation响应头都应该指向https://website.com/开头的地址 - 注意浏览器缓存:之前的301重定向会被浏览器缓存,测试时建议用隐私模式或者清除浏览器缓存
备注:内容来源于stack exchange,提问作者georgleb
相关产品推荐
相关产品推荐

