nginx之如何在Nginx中隐藏文件扩展名

zhengyun_ustc 阅读:20 2024-10-24 08:47:37 评论:0

来自Apache背景,过去我使用一对重写规则隐藏了.html文件扩展名:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /.+\.html\ HTTP 
RewriteRule ^(.+)\.html$ http://%{HTTP_HOST}/$1 [R=301,L] 
 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^.+$ %{REQUEST_FILENAME}.html [L] 

nginx的重写功能不同,可能的解决方案是 here,但是,nginx Wiki建议尽可能避免ifs是最佳解决方案,并讨论使用( try_files)代替。我想知道是否有人拥有实现这样的最佳方法,而同时:
try_files $uri $uri.html =404; 

在某些情况下有效,您会遇到大量的重定向问题等。在这种情况下,有什么方法可以避免ifs?

请您参考如下方法:

您将使用try_files指令,如下所示:

location / { 
  try_files $uri $uri.html =404; 
} 

这对与位置块匹配的每个uri执行以下操作
  • 检查是否有完全匹配的文件,如果有的话,将其提供给
  • (如果未找到完全匹配),然后尝试将.html添加到请求
  • (如果未找到)返回404

  • 根本没有重定向,只是nginx依次检查了几个选项。
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME}.html -f 
    RewriteRule ^.+$ %{REQUEST_FILENAME}.html [L] 
    

    前2行基本上是1.和2。不同之处在于nginx不需要重写url,因为try_files指令使其足够聪明,可以在找到匹配项时返回请求


    标签:nginx
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号