Nginx
在 Nginx 中,如何重定向到另一個域,但還要保留路徑和子域?
因此,例如,我有一個域
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; }
但它不適用於子域,因為所有子域都會重定向到
newdomain.com/path
而不考慮子域。
您似乎正在尋找這樣的東西:
if ($http_host ~ (.*)\.olddomain\.com) { set $subdomain $1; rewrite (.*)$ http://$subdomain.newdomain.com$1 permanent; } rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;
這些是我的測試案例
$ 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/