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

如何用Nginx实现子域名请求转发至子目录且不修改浏览器URL

解决方案

你需要用Nginx的内部重定向/反向代理来实现,而不是会触发外部跳转的rewrite规则。以下分两种场景给出具体配置:

场景1:子域名与主域名部署在同一台服务器

如果主站点文件存放在/var/www/example.com,子目录subdomain的路径为/var/www/example.com/subdomain,可以用alias指令实现内部映射,浏览器地址栏不会改变:

server {
    listen 80;
    # 若启用HTTPS,添加以下配置
    listen 443 ssl;
    server_name subdomain.example.com;

    # 替换为你的SSL证书路径(HTTPS场景必填)
    # ssl_certificate /path/to/ssl/cert.pem;
    # ssl_certificate_key /path/to/ssl/key.pem;

    location / {
        # 注意末尾的斜杠不能省略,否则路径拼接会出错
        alias /var/www/example.com/subdomain/;
        # 根据站点类型设置默认索引文件
        index index.html index.htm index.php;
    }

    # 若站点是PHP项目,需额外配置PHP解析规则
    location ~ \.php$ {
        alias /var/www/example.com/subdomain/;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 替换为你的PHP-FPM路径
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include fastcgi_params;
    }
}

场景2:子域名与主域名部署在不同服务器

如果主站点在另一台服务器上,用proxy_pass反向代理将子域名请求转发到主域名的子目录,同时保持地址栏不变:

server {
    listen 80;
    listen 443 ssl;
    server_name subdomain.example.com;

    # SSL证书配置(HTTPS场景必填)
    # ssl_certificate /path/to/ssl/cert.pem;
    # ssl_certificate_key /path/to/ssl/key.pem;

    location / {
        # 注意末尾的斜杠,确保路径正确拼接
        proxy_pass https://example.com/subdomain/;
        # 传递必要请求头,保证主站点能正确处理请求
        proxy_set_header Host example.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

你之前的配置无效原因

  • 第一个配置用了permanent参数,会触发301永久跳转,浏览器地址栏必然改变;
  • 第二个rewrite规则仅做内部路径重写,但如果没有对应server块处理重写后的/subdomain路径,或是路径拼接错误,就无法正确映射内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:43:12