Nginx Rewrite URL To End With .html
在此之前,网站一直使用的 URL 规则是以 .html
作为后缀在运行,但并没有强制。意味着有没有 .html
后缀都可以正常访问。
这样带来一个问题是搜索引擎和统计工具认为带有 .html
后缀的 URL 和没有该后缀的 URL 是不同的地址,给统计分析带来一些麻烦。
所以决定强制执行请求地址必须带有 .html
后缀!
为了兼容之前已经被分享出去且不带后缀的 URL 可以正常访问,就需要把这些 URL 地址重定向到带有后缀进行解析。
以下是 Nginx 的配置片段
server {
...
set $bootstrap "index.php";
location / {
index index.html $bootstrap;
try_files $uri @rewrite_to_html;
}
location @rewrite_to_html {
if ($request_method = GET){
rewrite ^/(.*)/$ /$1.html permanent;
rewrite ^/(.*)$ /$1.html permanent;
#Stops processing the current set of ngx_http_rewrite_module directives -- from nginx documents
break;
}
try_files $uri /$bootstrap?$args;
}
#If the request end with .html, then rewrite to $bootstrap directly.
location ~ \.html$ {
try_files $uri /$bootstrap?$args;
}
}