You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Nginx将子域名重定向至主域名的问题

子域名跳主站问题排查&修复

  1. 绕开浏览器缓存测试
    别用浏览器,直接用curl测子域名的服务器响应,排除缓存干扰:
curl -I http://a.example.com
curl -I http://z.example.com
  • 如果返回HTTP/1.1 200 OK,那就是浏览器缓存了之前的301跳转,清缓存或者开隐私窗口就行。
  • 如果返回301且指向主站,那就是Nginx配置的匹配逻辑有问题。
  1. 检查Nginx配置是否生效
    先确认配置语法无错误:
sudo nginx -t

没问题的话重新加载配置:

sudo nginx -s reload

再确认sites-enabled里的软链接正确指向sites-available中的对应文件:

ls -l /etc/nginx/sites-enabled/
  1. 修正监听配置(核心)
    你当前a.example.conf和example.conf的80端口都绑定了同一个指定IP,这会导致Nginx匹配逻辑混乱。建议统一成和z.example.conf一致的监听方式:
    修改a.example.conf的监听部分:
server {
    # 监听所有IP的80端口
    listen 80;
    listen [::]:80;

    server_name a.example.com www.a.example.com;
    root /var/www/html/a-example/;
    index index.php;

    # 其余配置保持不变
}

这样每个子域名的server块都监听所有80端口,Nginx会根据Host头精确匹配对应的server块,不会串到主站的跳转规则里。

  1. 排查HSTS影响
    主站的HSTS配置没加includeSubDomains,理论上不会影响子域名,但如果之前误配过,浏览器可能还缓存着规则。可以测试子域名的HTTPS响应:
curl -I https://a.example.com

如果子域名未配置HTTPS,应该返回连接失败;要是返回301到主站,清浏览器的HSTS缓存即可。


顺带解决你提到的其他问题

1. phpBB3带参数的请求重写失效

当前@rewriteapp规则会丢失URL参数,修改为以下内容即可保留参数:

location @rewriteapp {
    rewrite ^(.*)$ /forums/app.php$1 last;
}

同时调整/forums/里的try_files规则,确保参数正常传递:

location /forums/ {
    try_files $uri $uri/ @rewriteapp;

    location ~ \.php(/|$) {
        include fastcgi.conf;

        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        # 修改此处以保留参数
        try_files $uri $uri/ /forums/app.php$is_args$args;

        fastcgi_param HTTP_PROXY '';
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # 其余配置不变
}

2. WordPress Shop页面跳转到phpBB3的404

当前/shop/规则优先级不足,被根目录和论坛规则拦截。修改为以下配置,单独处理shop目录的请求:

# WordPress Shop 配置
location /shop/ {
    try_files $uri $uri/ /shop/index.php$is_args$args;

    # 单独处理shop目录下的PHP文件,避免被全局规则覆盖
    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param HTTPS on;
    }
}

另外,根目录location /中的注释PHP块建议移除,避免规则冲突。


内容的提问来源于stack exchange,提问作者Matdragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:25:25