Nginx
讓 nginx 將所有內容重定向到 https,除了一個目錄
我需要 nginx 將所有 http URL 重定向到 https,但“.secret/”目錄除外,該目錄應繼續用作 http。
因此,例如:
http://example.com/a.html
–>https://example.com/a.html
http://example.org/z/b.html
–>https://example.org/z/b.html
http://example.com/.secret/x.html
–>http://example.com/.secret/x.html
我的配置中有以下內容,但對於 http,它返回包含“_”的地址。
server { listen 80; server_name _; location /.secret { return http://$server_name$request_uri; } location / { return 301 https://$server_name$request_uri; } }
我究竟做錯了什麼?
更新:
結合來自@mforsetti 和@Pothi_Kalimuthu 的評論,以下工作有效:
server { listen 80; server_name _; location /.secret { } location / { return 301 https://$host$request_uri; } }
它返回包含“_”的地址。
server_name _; location /.secret { return http://$server_name$request_uri; }
$server_name
返回分配server_name
給server
塊,在你的情況下是_
; 因此_
返回的地址。如果您希望它返回主機名或
Host
請求標頭,請嘗試使用$host
,例如:location /.secret { return http://$host$request_uri; }
.secret/
應該繼續作為 http 服務的目錄如果要提供目錄,請指定一個
root
目錄。location /.secret { root /path/to/your/parent/of/secret/directory; }