Nginx 多域名重定向到主域名需分块处理:一个 server 块专用于 301 跳转,server_name 列出所有待跳转域名,return 301 https://www.example.com$request_uri;另一 server 块仅含主域名,负责实际服务;HTTPS 跳转需配置 SSL;宝塔中域名别名不等于重定向,须通过重定向功能配置。

用 Nginx 的 server_name 实现多个域名重定向到主域名,核心是“分块处理”:一个 server 块专做跳转,另一个 server 块承载主站。不推荐在同一个 server 里用 if 判断 Host,既低效又易出错。
单独配置跳转 server 块
为所有需要跳转的域名(如裸域、子域、旧域名)单独写一个 server 块,监听 80 或 443 端口,只做一件事:301 重定向。
- 每个要跳转的域名都写进
server_name,空格分隔,例如:server_name example.com demo.example.com oldsite.net; - 用
return 301直接跳转,保留路径和参数:return 301 https://www.example.com$request_uri; - HTTPS 跳转需确保该 server 块已配置 SSL 证书(
ssl_certificate和ssl_certificate_key),否则会报错或降级为 HTTP
主站 server 块只留主域名
主站 server 块中 server_name 只写你希望最终呈现的域名,比如:server_name www.example.com;
- 这个块负责实际服务:静态文件、反向代理、PHP 处理等
- 不要把跳转域名也塞进来,否则会干扰匹配逻辑
- 如果同时支持
www.example.com和example.com都作为主站访问(不跳转),那两个都要写进server_name,但此时就不是“重定向到主域名”,而是多域名共存
避免默认 server 干扰匹配
Nginx 在端口上如果没有明确匹配的 server_name,就会落到第一个 server 块(或标记了 default_server 的那个)。这可能导致跳转失效或请求误入主站。
- 确保跳转 server 块的
server_name覆盖所有待跳转域名,不遗漏 - 若想兜底处理“其他所有未声明的域名”,可用
server_name _;+default_server,但仅用于 catch-all 场景,勿与主站混用 - 配置后务必运行
nginx -t检查语法,再用nginx -T | grep "server_name"确认实际加载的值是否符合预期
宝塔用户注意别名 ≠ 重定向
宝塔面板里的「域名别名」只是让多个域名共用同一套配置和文件,不会自动跳转。如果你在「域名管理」里加了 example.com 作为别名,它仍会以原域名访问,不跳转。
- 要实现跳转,必须走「重定向」功能:站点设置 → 重定向 → 添加 301 规则
- 源域名填
example.com,目标 URL 填https://www.example.com$request_uri - 检查最终生成的 Nginx 配置文件(通常在
/www/server/panel/vhost/nginx/xxx.conf),确认server_name行确实包含对应域名,且跳转规则已写入独立 server 块











