nginx中的位置从域重定向到另一个域

nginx中的位置从域重定向到另一个域

我想将 位置 重定向play.example.com/u/<user id>example.com/u/<user id>play.example.com/b/<game id>play.example2.net/b/<game id>

同时也有网站选项(我托管在同一个域上的 webroot 和 api)。我该如何实现?

答案1

如果我正确理解了你的问题,那么这应该可行:

server {
  server_name play.example.com;

...

  location ~ ^/u/(.*)$ {
    return 301 $scheme://example.com/u/$1;
  }

  location ~ ^/b/(.*)$ {
    return 301 $scheme://play.example2.net/b/$1;
  }
}

答案2

就在今天早上,我很好奇如何有选择地将部分但不是全部路径重定向到另一台主机。

使用$request_uri变量可以让我们免于编写正则表达式:

location /u/ { 
  return 301 $scheme://play.example2.net$request_uri;
}

只有匹配的请求/u/...才会进入位置块并触发。这将重定向到目标主机上的return 301相应位置,因为包含匹配的位置前缀。/u/...$request_uri

位置中的尾部斜杠很重要,否则它会重定向以/u...like/user或开头的任何路径/ultron。但这意味着它不会将请求重定向到 naked /u

如果您还想重定向裸露内容/u,请使用前缀定义另一个位置=

location = /u {
  return 301 $scheme://play.example2.net$request_uri;
}

文件中这两个位置的顺序无关紧要。Nginx 将优先匹配 ,而不= /u是以 为前缀的其他位置/u...

相关内容