Nginx:请求不带扩展名的文件

Nginx:请求不带扩展名的文件

如何在没有扩展的情况下请求 nginx 服务器上的 html 页面?

即:example.com/about 应返回 example.com/about.html。对于所有 html 页面,这应该都是正确的。

我的想法是这样的:

try_files $uri $uri.html;
index  index.html;

它可以工作,但是访问 example.com/ 会导致 403 Forbidden:

2015/01/20 19:26:11 [error] 32618#0: *373061 access forbidden by rule

访问不存在的页面(example.com/bla)会导致重定向循环:

2015/01/20 19:26:57 [error] 32620#0: *373065 rewrite or internal redirection cycle while internally redirecting to "/bla.html.html.html.html.html.html.html.html.html.html.html"

更新了完整的 nginx 配置:

server {
    listen          [::]:80;
    server_name     example.com;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;
    root   /var/www/example/;
    try_files $uri $uri.html /index.html =404;
    index  index.html;
    expires max;
    autoindex off;

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

答案1

修改 try_files 行使其如下所示:

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

您看到循环的原因是,如果在搜索过程中未找到有效位置,try_files 将强制重定向到最后一个条目。

进一步阅读和参考:http://wiki.nginx.org/HttpCoreModule#try_files

答案2

为了避免/index.html在 URL 错误的情况下被重定向到 404,请try_file按如下方式设置:

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

相关内容