在此之前,网站一直使用的 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;
    }
}