如何在没有扩展的情况下请求 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 将强制重定向到最后一个条目。
答案2
为了避免/index.html
在 URL 错误的情况下被重定向到 404,请try_file
按如下方式设置:
try_files $uri $uri.html $uri/index.html =404;