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

Nginx同子域名重定向404问题求助:mysubdomain.example.com定向到同域路径

我来帮你排查这个问题,首先你的Nginx配置里有几个容易踩坑的点,尤其是在location /里混用try_files和if,这很容易导致规则执行顺序不符合预期,进而出现404的情况。

问题根源分析

当你把重定向目标设为主域名时正常,但同子域名就报错,核心原因有两个:

  1. 你把重定向规则嵌套在location /内部,try_files会优先处理请求——访问根路径/时,try_files会先尝试查找对应文件/目录,找不到就内部重定向到/index.php,这时候你的if规则要么没触发,要么触发后重定向到/fa/news,但子域名的配置没正确处理这个路径的请求。
  2. Nginx官方明确不推荐在location内使用if,它的行为经常超出预期,很容易引发冲突。

解决方案:调整配置结构

你需要把根路径的重定向单独抽出来,用精确匹配的location优先处理,同时确保子域名的资源路径和PHP解析配置正确。修改后的配置示例如下:

server {
    listen 80;
    server_name mysubdomain.example.com;
    root /path/to/your/application; # 这里必须和主域名的root保持一致,确保资源路径正确

    # 精确匹配根路径请求,优先级最高,直接触发重定向
    location = / {
        rewrite ^ http://mysubdomain.example.com/fa/news permanent;
    }

    # 处理所有其他路径的请求,保留原有的try_files规则
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # 确保PHP文件能被正确解析(根据你的PHP版本调整fastcgi_pass路径)
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 替换为你的PHP-FPM套接字或端口
    }
}

为什么这样能解决问题?

  • location = /是精确匹配,优先级远高于普通的location /,访问mysubdomain.example.com/时会直接触发重定向,不会被try_files干扰。
  • 重定向到/fa/news后,请求会进入location /,通过try_files转发到index.php处理,只要你的应用在子域名下配置了/fa/news的路由,就能正常返回内容。
  • 统一root路径确保子域名和主域名访问的是同一套应用资源,避免因路径错误导致的404。

最后检查步骤

  1. 确认root路径指向你的应用根目录,和主域名配置完全一致。
  2. 重启Nginx服务:sudo systemctl restart nginx
  3. 清除浏览器缓存后测试重定向是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:47