问题描述

今天部署遇到的问题,访问项目的"localhost:8080/" ,可以成功看到 index页面。

但是当我以"localhost:8080/example"——这个url来访问 example.html 这个子页面文件的时候,发现nginx返回404了,就是nginx找不到相应的 example.html 文件。

问题分析

因为 example.html 这个文件全名是带有后缀".html"的,而“/example”只会让nginx去直接寻找文件名是example(没有后缀)的文件,当然是找不到的。

解决方法,个人觉得有两种,推荐第二种

(1)直接url访问全名,比如 “localhost:8080/example.html”,这样就能找到对应子文件;

(2)在nginx.conf配置文件中,加入以下代码(见下方解决方案)

解决方案

在nginx.conf中添加以下字段,主要是 try_files 这一句:

location / {
    root  /webroot/project;
    index index.html index.htm;
    try_files $uri $uri/ $uri.html /index.html;
}
  • root 是项目的根目录,比如你的项目是在 /home/project ,那么root就写成root /home/project
  • index 是你的首页文件的名称,一般都是 index.html index.htm index.php 这仨,因为我的项目是纯前端,所以也就只设置了 Index.html 和 index.htm 这两个
  • try_files 当请求来时,nginx会按照try_files后面的顺序依次遍历查找是否有对应的文件,其中$uri 指的是你addres携带的后缀,比如访问的是 localhost:8080/example,那么这里的$uri就是 /example 。图中的try_files,会依次访问/example ,/example/,/example.html还有/index.html——最后一个我放的是/index.html,意味着如果找不到对应文件,那么就直接返回首页index.html页面给用户。

--------------------

作者:JSluck

日期:2022年3月22日

解决过程参考:nginx配置https之后只有首页能访问,其他页面404_leedaning的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐