CentOS下Nginx部署静态HTML页面跳转404问题求助
解决静态HTML相对路径跳转404的问题
咱们一步步拆解这个问题,很多人配置静态站点时都会碰到类似的情况!你的核心矛盾在于Nginx只会在root指定的目录下查找文件,跳转失败要么是文件路径逻辑错了,要么是Nginx没被引导去正确的位置找文件。分两种场景来解决:
场景1:跳转的文件就在当前root目录下
你的Nginxroot指向/home/apps/html/one,如果differentFolder/index.html实际存放在/home/apps/html/one/differentFolder/里,那问题大概率出在这两点:
- 相对路径写错了:检查HTML里的跳转链接,比如当前页面是
domain.tk/index.html,跳转链接应该写./differentFolder/index.html或者直接differentFolder/index.html;别写成/differentFolder/index.html(带开头斜杠的是绝对路径,虽然指向网站根目录,但如果是从子页面跳转,路径层级容易混乱)。 - 文件权限不匹配:Nginx进程(通常用
nginx用户)没有读取这个文件的权限。运行下面的命令修复权限:
之后重启Nginx生效:chown -R nginx:nginx /home/apps/html/one chmod -R 755 /home/apps/html/onesystemctl restart nginx
场景2:跳转的文件不在当前root目录下
如果differentFolder实际在/home/apps/html/(和one同级),那Nginx默认只会去/home/apps/html/one里找,自然返回404。这时候不用给每个HTML文件都单独注册路由,只要给整个文件夹配置一个location就行,有两种常用方式:
方式1:用root配置映射
修改你的Nginx server块:
server { listen 80; server_name domain.tk www.domain.tk; root /home/apps/html/one; location / { index index.html; } # 把/differentFolder路径映射到上级目录的对应文件夹 location /differentFolder/ { root /home/apps/html; # 这里指向differentFolder所在的父目录 index index.html; } }
方式2:用alias配置(更精准)
alias会直接把location的路径替换成指定目录,适合这种跨文件夹的场景:
server { listen 80; server_name domain.tk www.domain.tk; root /home/apps/html/one; location / { index index.html; } location /differentFolder/ { alias /home/apps/html/differentFolder/; # 直接指向目标文件夹 index index.html; } }
配置完成后重启Nginx,再测试跳转就正常了。
总结
- 如果文件在当前
root目录下:检查路径和权限,无需修改Nginx配置 - 如果文件在其他目录:给目标文件夹配置一个
location即可,不用每条路由都单独注册 - 也可以调整HTML里的跳转路径,确保相对路径指向正确的文件位置
内容的提问来源于stack exchange,提问作者StackSmack007
相关产品推荐
相关产品推荐

