作为标题描述,当我请求“ 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来解决它,我只想知道为什么当我在一个位置块中使用带索引的别名时,它为什么不起作用。谢谢!
答案 0 :(得分:0)
index module执行多阶段处理。
如果URI以/
结尾并且被发现是location
中当前正在处理请求的目录,则Nginx将检查与{{1}中的名称匹配的文件}指令的值。
如果找到匹配的文件,则将通过附加该名称来更改URI,然后将开始搜索index
以处理新URI。
在您的情况下,URI location
与原始/test/poster/posters.html
不匹配,因此找不到location
文件。
答案 1 :(得分:0)