Nginx 添加尾部斜杠而不重寫

Nginx 添加尾部斜杠而不重寫

我正在嘗試創建重定向以添加尾部斜杠,

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(可能是拼字錯誤)。 ……或者也許因為您有其他指令,所以您沒有向我們展示覆蓋此指令的指令。

相關內容