Nginx

Nginx:去掉 .html 後綴後,如何將所有請求重定向到新的 URL?

  • April 15, 2020

我想優化舊的 Magento 商店系統的連結結構。到現在為止,在生成靜態頁面的時候,都會在對應的路徑中添加一個.html後綴。由於較早的問題,甚至存在帶有雙后綴的路徑(例如 .html.html)。現在我已禁用後綴並從數據庫中刪除了所有帶有雙后綴的路徑,我想設置從舊 URL 到新 URL 的自動重定向。

為了保留現有的超連結和搜尋引擎條目,我希望 Nginx 將對帶有 .html 或 .html.html 後綴的頁面的所有請求重定向到新路徑。

要求:

example.org/banana.html
example.org/banana.html.html

應該重定向到:

example.org/banana

所以實際上我最好的猜測是:

location / {
 rewrite ^(.*?)\.html(\.html)?$ $1 permanent;
 try_files $uri $uri.html $uri.html.html $uri/ =404;
}

如何達到我的目標以及我需要將哪些重寫規則添加到 nginx 配置中?

僅在塊try_files內使用一個語句。location可以根據需要添加文件條款。包括一個$uri術語來匹配那些直接匹配靜態文件的 URI(例如.css.js)。$uri/如果要使用該index指令,請包含一個術語。

例如:

try_files $uri $uri.html $uri.html.html $uri/ =404;

有關詳細資訊,請參閱此文件


這些rewrite語句是錯誤的,因為第一個總是匹配用於第二個的 URI。此外,重寫正在擷取變數中的前導,因此通過使用/您正在添加額外的前導。$1``/$1``/

您還可以將兩個正則表達式組合成一個語句,例如:

rewrite ^(.*?)\.html(\.html)?$ $1 permanent;

引用自:https://serverfault.com/questions/1012336