Nginx环境下非www转www永久重定向的最优方案咨询
针对Nginx的非www转www永久重定向方案
先明确:.htaccess在Nginx里行不通
首先得给你掰扯清楚,.htaccess是Apache服务器的专属配置文件,Nginx完全不支持它。所以你不用纠结两种方案选哪个,直接专注于Nginx的服务器层面配置就对了。
是否需要分别处理80和443端口?
必须要!现在绝大多数网站同时运行HTTP(80端口)和HTTPS(443端口),如果只配置其中一个,会导致部分访问场景下重定向失效:比如用户输入http://example.com(HTTP非www),或者https://example.com(HTTPS非www),这两种情况都得覆盖到才能保证所有请求都跳转到正确的https://www.example.com。
具体配置示例
下面是完整的Nginx配置代码,你可以直接替换成自己的域名和证书路径:
1. 处理HTTP(80端口)所有请求
server { listen 80; server_name example.com www.example.com; # 把所有HTTP请求永久重定向到HTTPS的www版本 return 301 https://www.example.com$request_uri; }
2. 处理HTTPS(443端口)的非www请求
server { listen 443 ssl; server_name example.com; # 填写你的SSL证书和密钥路径 ssl_certificate /path/to/your/fullchain.crt; ssl_certificate_key /path/to/your/private.key; # 把HTTPS非www请求永久重定向到HTTPS的www版本 return 301 https://www.example.com$request_uri; }
3. 主网站的HTTPS(www)配置
这部分是你实际网站的核心配置,保证www.example.com能正常访问:
server { listen 443 ssl; server_name www.example.com; # 同样配置SSL证书(可以和上面的一致,或者用include复用) ssl_certificate /path/to/your/fullchain.crt; ssl_certificate_key /path/to/your/private.key; # 网站根目录和默认索引文件 root /var/www/your-site-root; index index.html index.php; # 这里可以添加你的其他Nginx规则,比如PHP处理、静态文件缓存等 # ... }
配置后的验证步骤
- 先测试Nginx配置是否有语法错误:
nginx -t
- 如果提示
test is successful,就重启Nginx让配置生效:
systemctl restart nginx
(如果是老系统,可能用service nginx restart)
为什么这么配置?
- 用
301永久重定向:对SEO友好,搜索引擎会更新收录的域名地址 - 保留
$request_uri:确保用户访问的具体路径(比如example.com/about)会被正确跳转到www.example.com/about,不会丢失请求参数 - 覆盖所有场景:不管用户输入HTTP/HTTPS、带不带www,都能统一到目标地址
内容的提问来源于stack exchange,提问作者Prithviraj Mitra
相关产品推荐
相关产品推荐

