2017-11-10 158 views
0

我試圖強制HTTPS傳入連接,同時也重定向到一個特定的URL的所有請求。Nginx重定向爲http和https

期望的結果:

http://example.com - >https://example.com/dir

https://example.com - >https://example.com/dir

這裏是什麼,我相信應該工作,但說有太多的重定向。

server { 
    listen  80; 
    listen  443 ssl; 
    server_name example.com; 

    location/{ 
    return   301 https://$server_name/dir$request_uri; 
    } 

    location /dir { 
     try_files $uri $uri/ /index.php?$args; 
    } 

任何幫助非常感謝!

回答

0

服務器在監聽到443端口不應該重定向到本身(返回301 https://..。)

+0

如何將重定向寫入/ dir部分呢?我會放棄https嗎? –

+0

像這樣的東西應該可以工作 - 重寫^((?!dir /)\ S +)$ dir/$ 1 permanent;'。不太確定正則表達式,雖然沒有測試過 – avpav

0

你可以試試這個,

server { 
    listen 80; 
    listen 443; 
    server_name example.com; 

    location/{ 
     return 301 https://example.com/dir$request_uri; 
    } 

    location /dir { 
     ... 
     ... 
    } 

} 

基本思路是保持在兩聽指令相同的服務器塊。上面的代碼只是一個摘錄,你需要填寫缺少pieces.You可以參考this鏈接返回指令部分更多細節

編輯:更新與位置塊的代碼。

+0

不幸的是獲得了相同的結果。返回的URL如下所示:https://example.com/dir/dir/dir/dir/dir/ ......等等。不知道這是否意味着'對同一塊的無限調用',但我從我的結尾填入了部分內容。 –

+0

我用位置塊更新了代碼。你現在可以試一試嗎?您需要處理/ dir位置指令。 –

+0

就是這樣!非常感謝,網址現在看起來正確。感謝幫助! –