ori*_*on3 2 nginx subdomain 301-redirect
例如,我有一个域olddomain.com
并且newdomain.com
以下是我希望请求重定向的工作方式:
sub.olddomain.com/hello/world -> sub.newdomain.com/hello/world
olddomain.com/hello/world -> newdomain.com/hello/world
有很多子域,因此理想情况下我不想为每个子域创建一条规则。
这似乎是一个解决方案:
server {
listen 80;
server_name olddomain.com *.olddomain.com;
rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于子域,因为所有子域都会重定向到newdomain.com/path
而不考虑子域。
您似乎正在寻找这样的东西:
if ($http_host ~ (.*)\.olddomain\.com) {
set $subdomain $1;
rewrite (.*)$ http://$subdomain.newdomain.com$1 permanent;
}
rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;
Run Code Online (Sandbox Code Playgroud)
这些是我的测试用例
$ curl -I -H "Host: test1.olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:33 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.newdomain.com/
$ curl -I -H "Host: test1.test2.olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:38 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.test2.newdomain.com/
$ curl -I -H "Host: test1.test2.olddomain.com" nginx1.tst/with-something/appended.html
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:54 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.test2.newdomain.com/with-something/appended.html
$ curl -I -H "Host: olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:41:10 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://newdomain.com/
Run Code Online (Sandbox Code Playgroud)