为什么请求没有后缀的文件扩展名html会下载文件?

时间:2017-05-27 13:43:05

标签: html nginx configuration

我想测试nginx的echo模块。我想回复我在浏览器中键入的内容。

我的nginx配置:

   index  index.php index.html index.htm index.nginx-debian.html ;

   location / {               
       try_files $uri $uri/  /index.php  =404;              
   }
   location  /hello {
   echo $request_uri;
   }

输入网址:http://127.0.0.1/hello/.

返回:返回文件,文件包含内容:/hello/

输入网址:http://127.0.0.1/hello/hi

返回:返回文件,文件包含内容:/hello/hi

输入网址:http://127.0.0.1/hello/hi.html

浏览器中返回打印 /hello/hi.html

我的问题: 为什么没有html后缀的url会成为下载文件? 怎么解决? 我只想在浏览器中打印网址。

2 个答案:

答案 0 :(得分:3)

nginx确定扩展程序中的Content-Type。这些包含在名为mime-types的文件中。您可以通过在default-type块中放置location指令来覆盖此行为。例如:

location  /hello {
    types {}
    default_type    text/html;
    echo $request_uri;
}

有关详情,请参阅this doucument

答案 1 :(得分:1)

浏览器是否会最终呈现页面/下载文件取决于其他因素,例如,http标头中的'Content-type' / 'Content-Disposition'

Content-Disposition takes one of two values, `inline' and
`attachment'.  `Inline' indicates that the entity should be
immediately displayed to the user, whereas `attachment' means that
the user should take additional action to view the entity.

您可以在访问时检查并比较http响应 / hello / hi或/hello/hi.html,检查这两个标头中至少有一个可能没有正确设置,在这种情况下,更可能内容类型不是'text / html'这里

解决方案是为您的路径指定内容类型,可能类似于

location  /hello {
  default_type "text/html";
  echo $request_uri;
}

location  /hello {
  add_header  Content-Type 'text/javascript;charset=utf-8';
  echo $request_uri;
}