配置如下:
server {
listen 8099;
server_name localhost;
location / {
root E:/img/;
autoindex on;
}
location /img/{
root E:/img/;
autoindex on;
}
}
发生了这样的问题:
我直接以 localhost:8099/123.jpg 可以访问到图片。
但是我以 localhost:8099/img/123.jpg 会显示 404 错误。
我以为是他把 "/img/123.jpg" 理解成了 "E:/img/" 下 "img" 文件夹里的 "123.jpg" 图片,所以我把 "/" 的 location 配置注释掉了,只保留 "/img/" 的配置,但是访问还是显示 404 错误,请问这是什么原因?正确的话应该如何配置?
系统是 WIN7 nginx 版本是 1.14.2
1
0ZXYDDu796nVCFxq 2018-12-13 10:42:53 +08:00 via Android 1
location /img/{
root E:/img/; autoindex on; } 改为 location /img/{ alias E:/img/; autoindex on; } 原理自己看官方文档吧 https://nginx.org/r/root |
2
zpf124 2018-12-13 11:20:27 +08:00 1
location 只是匹配,而不是匹配之后截掉匹配的部分,另外你对于 这个 location 的匹配顺序理解也有些问题。
除了几个个别的规则外,location 的匹配是越精确越优先的,在同样精度的情况下才会按照文本顺序匹配的, 你百度搜一下 有很多这种文章。 对于 你这个请求, /img/123.jpg 在不注释掉任何一个之前 也依旧是被 /img/ 的 location 匹配的。 但 只是匹配, location 不会截取 URI 的 也就是说 进了这个 location 处理里面的 URI 还是 /img/123.jpg 。 而你指定的 root 是 E:/img/ 自然拼接的就多一层了。 改成 这样也行。 location /img/{ root E:/; autoindex on; } |
3
msg7086 2018-12-13 13:50:09 +08:00
非常典型的 alias 与 root 的区别。用 root 的话解析地址就是 root 地址加上全文件名。
|
4
loading 2018-12-13 13:55:03 +08:00 via Android
这种看 error.log 就能自己修过去。
|