我正在嘗試創建重定向以添加尾部斜杠,
location / {
if($request_uri ~ ^([^.]*[^/])$){
return 301 https://$host$request_uri/;
}
}
我不知道如何在 if 中進行匹配,當我簡單地使用 / 創建重定向時 - 它有效,只是這個正則表達式似乎損壞了。
更新
重寫我嘗試過的
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
.....
}
和
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
工作正常,重定向到 https,我也想用它創建正規表示式
答案1
很久以前就解決了,但我看到很多人檢查這個問題,所以如果我沒記錯的話,我沒有這行程式碼,它正在重定向我:
port_in_redirect off;
我知道,我沒有提到有問題的端口,無法回答,但如果有人遇到同樣的問題,我會將其留在這裡
答案2
如果我正確理解這個問題,您希望自動提供服務,而不使用 301 重定向,http://example.com/foo/index.html當請求是為了http://example.com/foo沒有尾部斜線?
如果是這樣,我發現這個 try_files 配置可以運作:
try_files $uri $uri/index.html $uri/ =404;
- 第一個
$uri
與 uri 完全匹配 - 第二個
$uri/index.html
匹配包含index.html的目錄,其中路徑的最後一個元素與目錄名稱匹配,沒有尾部斜杠 - 第三個
$uri/
符合目錄 =404
如果前面的模式都不匹配,則第四個返回 404 錯誤頁面。
答案3
這似乎按預期工作:
location / {
if ($request_uri ~ ^([^.]*[^/])$) {
return 301 https://$host$request_uri/;
}
try_files $uri $uri/ /index.html;
....
}
不確定與您嘗試過的有什麼不同,除了語句中缺少空格而應該遇到的語法錯誤if
(可能是拼字錯誤)。 ……或者也許因為您有其他指令,所以您沒有向我們展示覆蓋此指令的指令。