Nginx
Nginx:去掉 .html 後綴後,如何將所有請求重定向到新的 URL?
我想優化舊的 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;