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

如何为Nginx配置特定子域名及对应路径的定向跳转规则

配置方案

你可以直接在原有server块中新增跳转规则,不会影响其他请求的原有处理逻辑,参考配置如下:

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  server_name ~^(?P<sub>.+)\.(example1|example2)\.com$;
  root /var/www/instances/$sub;

  # 新增跳转规则
  if ($host = 'sub1.example1.com') {
    # 匹配/wiki/0/前缀的路径跳转
    rewrite ^/wiki/0/(.*)$ https://newSub1.example1.com/wiki/0/$1 permanent;
    # 匹配/wiki/20/前缀的路径跳转
    rewrite ^/wiki/20/(.*)$ https://newSub2.example1.com/wiki/0/$1 permanent;
  }

  # 原有其他配置保持不变
  ...
}

规则说明

  • 仅当请求的Host头为sub1.example1.com时才会触发两条重写规则,其他子域名的请求完全不受影响
  • 重写规则中的(.*)会捕获前缀之后的所有路径内容作为$1,拼接到目标URI之后,保留原始的$path部分
  • 示例中使用permanent返回301永久跳转,如果你需要临时跳转,替换为redirect即可返回302状态码
  • 所有不匹配两个前缀路径的sub1.example1.com请求,会继续走原有配置的站点逻辑,不需要额外调整

优化方案(可选)

如果你希望规避Nginx中if指令潜在的执行逻辑问题,也可以采用性能更优的map方案,配置如下:
首先在Nginx的http配置块中新增map映射规则:

http {
  # 原有http层级其他配置保持不变
  ...

  map $host$request_uri $redirect_target {
    default "";
    ~^sub1\.example1\.com/wiki/0/(.*)$ newSub1.example1.com/wiki/0/$1;
    ~^sub1\.example1\.com/wiki/20/(.*)$ newSub2.example1.com/wiki/0/$1;
  }

  server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name ~^(?P<sub>.+)\.(example1|example2)\.com$;
    root /var/www/instances/$sub;

    # 新增跳转逻辑
    if ($redirect_target != "") {
      rewrite ^ https://$redirect_target permanent;
    }

    # 原有server层级其他配置保持不变
    ...
  }
}

内容的提问来源于stack exchange,提问作者Hans-Helge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:57:03