问题描述
进入页面后刷新不会出现任何问题,当你从/路由跳转到/XXX路由,再刷新就会提示404。
问题原因
我们的服务器是根据页面路由,去按路径寻找资源的。我们打包好的web站点只有一个html页面,不存在其他资源目录下的html,服务器找不到对应页面所以才报404。
解决方案
我看网上有人用配置多个location对象,通过重定向回根目录的index.html解决这个问题。但是我觉得这个方案过于繁琐,不适用于比较大,页面比较多的项目。于是我找到了一个只需要加一行代码就可以解决的方案。
<!--只需要把这行代码加到我们的根目录的location配置项中就可以解决这个问题-->
try_files $uri $uri/ /index.html;
worker_processes 4;
events {
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 60;
gzip on;
underscores_in_headers on;
proxy_buffering off;
client_max_body_size 20M;
client_body_buffer_size 128k;
server {
listen 80;
server_name 127.0.0.1;
root D:\\IdeaProjects\\datika\\build\\;
index index.html;
# 这行代码解决打包的页面路由到别的页面后刷新导致404的问题
try_files $uri $uri/ /index.html;
}
}
<!--完成这些后,你只需要保存退出vim编辑器并重新启动nginx就可以了。 -->
如果大家不想麻烦,也可以直接换hash路由解决问题。
本文转载 [https://juejin.cn/post/6844904186862125069],感谢!(https://juejin.cn/post/6844904186862125069)