2013-08-02 30 views
0

我想配置http和https從舊站點重定向到新的。Nginx的https重定向 - 停止進一步的規則處理

根據重寫指令文檔:

如果替換字符串以http://則客戶端將 被重定向,任何進一步改寫指令被終止。

而我試圖達到與https無效的相同。 這是我的服務器配置:

listen 80; 
listen 443 ssl; 
server_name mydomain.com 

rewrite ^/path/resource(.*)$ $scheme://newdomain.com/newpath/resource$1 permanent; 
... 
return 301 http://newdomain.com/newpath/; 

使用HTTP我得到了我在尋找:如果我訪問mydomain.com/path/resource我重定向到newdomain.com/newpath/resource

但是,與https一樣將我重定向到http://newdomain.com/newpath/

我有rewrite_log在和在這兩種情況下重寫規則匹配,但https協議不會停止進一步的規則處理。

我有這樣的感覺,要麼我錯過了一些非常明顯的東西,要麼我沒有正確處理這個問題。如果它有效,我不會介意以任何不同的方式進行此操作。

有沒有關於如何使用https實現http重定向的任何想法?

回答

0

我通常喜歡用return,而不是rewrite對重定向,嘗試的路徑與位置塊

location ~ /path/resource(.*) { 
    return 301 $scheme://newdomain.com/newpath/resource$1; 
} 

我覺得這種方式,你知道肯定不會有進一步的處理相匹配,因爲它是唯一的1線,試試吧,告訴我它是怎麼回事。

PS:這樣可以保持請求的$scheme,請求對http://將被重定向到一個http://https://將被重定向到https://

+0

我已經試過這一點,我總是重定向到http不管的原始網址是http或https。 – Paco

+0

你能寫出你使用的新配置嗎? –

+0

'server { listen 80; listen 443 ssl; ssl_certificate ... crt_file; ssl_certificate_key ... key_file; server_name mydomain.com www.mydomain.com; root ...; location〜/path/resource.php(.*){ return 301 $ scheme://newdomain.com/newpath/resource$1; }' – Paco