首页 > 解决方案 > nginx在请求路径时返回一个文件

问题描述

如标题描述,当我请求“ http://example.com/test/poster/ ”时,我想获得真正的文件“/home/vagrant/example/resouces/views/posters.html”。

这是我的nginx配置:

server_name example.com;
root /home/vagrant/example/public;
index index.html;

location / {
    return 404;
}

location ~ ^/test/poster/?$ {
    default_type text/html;
    index posters.html;
    alias /home/vagrant/example/resouces/views/;
}

但是当我发出请求时,我得到一个 404 响应。我搜索 nginx 错误日志,我得到以下信息:

2018/10/20 11:54:41 [debug] 4690#4690: *180 http script copy: "/home/vagrant/example/resouces/views/"
2018/10/20 11:54:41 [debug] 4690#4690: *180 open index "/home/vagrant/example/resouces/views/posters.html"
2018/10/20 11:54:41 [debug] 4690#4690: *180 internal redirect: "/test/poster/posters.html?"
2018/10/20 11:54:41 [debug] 4690#4690: *180 rewrite phase: 1

这是我的问题,当打开索引时,它找到了文件,为什么它会进行内部重定向?

我终于通过使用 try_files 解决了它,我只想知道为什么当我在一个位置块中使用带索引的别名时它不起作用。谢谢!

标签: nginx

解决方案


  1. 如果 uri 以 '/' 结尾,nginx 会将索引文件和别名路径组合为一个全路径索引文件,并检查该文件是否存在。
  2. 如果存在,则开始内部重定向;如果不存在,nginx 将检查别名路径是否为目录。
  3. 如果别名路径是 dir 则 nginx 会尝试其他索引文件,直到返回 403;如果别名路径不是 dir,则 nginx 将直接返回 404。

  1. 如果 uri 不以 '/' 结尾,nginx 将直接使用别名路径。
  2. 如果别名路径是文件但不存在,nginx 将返回 404;如果别名路径是 dir,则 nginx 将返回 301,尾部斜杠附加 origin uri。

推荐阅读