Nginx try_files指令无法指定静态文件,请求解决方案
Nginx配置:请求/abcd返回abcd.html,其他请求返回500
你的问题出在try_files的匹配逻辑上:当前配置里try_files $uri $uri/ =404会去查找/usr/share/nginx/html/abcd这个不带.html后缀的文件,但你目录里实际存在的是abcd.html,所以匹配不到才返回404。而$uri.html能正常工作,是因为它自动拼接了.html后缀,正好对应你目录里的文件。
给你两种可行的配置方案:
方案一:精准匹配location(推荐)
用精准匹配的location处理/abcd请求,其他请求直接返回500,这种方式比用if更符合Nginx的配置规范:
# 所有非/abcd的请求直接返回500 location / { return 500; } # 精准匹配/abcd请求,返回对应的html文件 location = /abcd { root /usr/share/nginx/html; try_files $uri.html =404; }
方案二:在同一个location内调整逻辑
如果一定要在根location里处理,可以直接指定try_files的目标为$uri.html:
location / { root /usr/share/nginx/html; # 非/abcd请求返回500 if ($request_uri != /abcd) { return 500; } # 直接查找带.html后缀的文件 try_files $uri.html =404; }
两种方案都能实现你要的效果:请求/abcd时返回abcd.html,其他任何请求返回500。
内容的提问来源于stack exchange,提问作者I have 10 fingers
相关产品推荐
相关产品推荐

