vue 路由 history 模式刷新页面出现 404 问题?
在Vue应用中,将路由模式从hash改为history确实可以去掉URL中的'#'符号,但的确需要后端服务器如Nginx进行相应的配置以避免页面刷新时出现404错误。以下是两种优化过的Nginx配置示例,旨在更清晰地解决此问题。
适用于大多数简单的Vue单页应用部署场景,通过重写规则将所有非静态资源请求重定向到index.html
。
server {
listen 80;
server_name your_domain.com; # 替换为你的域名
root /data/nginx/html; # 根据实际情况调整项目部署目录
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html; # 关键行,找不到文件则返回index.html
}
}
适用于需要更细致控制或有特定要求的场景,通过定义一个命名位置@router
来专门处理Vue路由的刷新问题。
server {
listen 80;
server_name your_domain.com; # 替换为你的实际域名
root /path/to/your/vue/app/dist; # 指向Vue项目打包后的dist目录
location / {
try_files $uri $uri/ @router; # 尝试访问请求的文件或目录,如果不存在则转到@router
index index.html index.htm;
}
# 处理Vue路由的请求
location @router {
rewrite ^.*$ /index.html last; # 重写所有请求到index.html,由前端路由处理
}
}
server_name
和root
指令中的路径为你的实际配置。root
指令中正确设置。listen
指令。try_files
和命名位置@router
的组合使用,提供了更明确的逻辑处理,尤其适合需要更细粒度控制的场景。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。