Nginx:删除 .html 后缀后,如何将所有请求重定向到新的 URL?

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 配置中添加哪些重写规则?

答案1

在一个块内仅使用一个try_files语句。location文件可以根据需要添加术语。包含一个$uri术语以匹配那些直接匹配静态文件的 URI(例如.css.js)。$uri/如果您想使用index指令,请包含一个术语。

例如:

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

这个文件了解详情。


这些rewrite语句是错误的,因为第一个语句始终会匹配第二个语句的 URI。此外,重写会捕获前导/in$1变量,因此通过使用,/$1您会添加一个额外的前导/

您还可以将两个正则表达式组合成一个语句,例如:

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

相关内容