2016-03-01 29 views
1

我目前正在玩弄nginx,並試圖重定向所有流量。 firstdomain.org to seconddomain.org這對於簡單的重定向工作正常,但我現在也希望它能夠處理URI,方案和子域。使用nginx重定向某個域的所有流量

E.g.

http(s)://firstdomain.org/重定向到http(s)://seconddomain.org/http(s)://firstdomain.org/test重定向到http(s)://seconddomain.org/testhttp(s)://test.firstdomain.org/重定向到http(s)://test.seconddomain.org/ 等..

我的當前設置是這樣的:沒有

server { 
    listen 80; 
    listen 443 ssl; 
    server_name ~^(?<sub>\w+)\.firstdomain\.org$, firstdomain.org; 

    ssl_certificate /path/to/certificate; 
    ssl_certificate_key /path/to/certificatekety; 

    location/{ 
     if ($sub = '') { 
       return 301 $scheme://seconddomain.org$request_uri; 
     } 
     return 301 $scheme://$sub.seconddomain.org$request_uri; 
    } 
} 

這是鏈接重定向子域就好,但只要它是例如http(s)://test.subdomain.orghttp(s)://test.subdomain.org/test它不起作用了。

有什麼我錯過了,或者有可能更簡單的方法nginx支持實現我想要做的事情嗎?

回答

1

您可以通過捕獲$sub.簡化:

server { 
    listen 80; 
    listen 443 ssl; 
    server_name ~^(?<sub>\w+\.)?firstdomain\.org$; 

    ssl_certificate /path/to/certificate; 
    ssl_certificate_key /path/to/certificatekety; 

    return 301 "$scheme://${sub}seconddomain.org$request_uri"; 
} 
+0

這個工作,非常感謝你! 只需要注意一點:它看起來像你需要將'firstdomain.org'添加到'server_name',否則它不會重定向普通的'http:// firstdomain.org'請求。 – 4m4rOk

+0

@Luca哎呀抱歉。我在正則表達式中加了一個'?'來使捕獲成爲可選的。 –

+0

我再次刪除'firstdomain.org'並添加了'?'。現在一切都按預期工作。謝謝! – 4m4rOk

相關問題