vue history模式Nginx配置

  vue-router默认路由模式为hash模式,使用url的hash来模拟一个完整的 url,形式为/mapp/#/subpage,于是当url改变时,只是刷新页面内容,页面不会重新加载。
但hash模式的url不像正常的url,在配置微信服务号网页授权访问的redirect_url时,微信平台会在该url后拼接?code=XXX&state=XXXX,若redirect_url为hash模式下的url,微信平台返回的连接是 /mapp?code=XXX&state=XXXX/#/subpage这种形式的,看起来不太美观,为使微信返回的url为正常形式,可以用路由的history模式,这种模式充分利用 history.pushState API 来完成url跳转而无须重新加载页面。
  当你使用 history 模式时,url就像正常的url,例如 “http://yoursite.com/mapp/subpage”,不过这种模式还需要后台配置支持。因为我们的应用是单页面应用,如果后台没有正确的配置,当用户在浏览器直接访问 "http://yoursite.com/mapp/subpage"就会返回 404。对于后台如何配置支持,官网:https://router.vuejs.org/zh/guide/essentials/history-mode.html提供的Nginx配置方案:

location / {
  try_files $uri $uri/ /index.html;
}

子目录部署

  若项目没有直接部署在Nginx主目录下,而是在其子目录,如:
Nginx配置root路径为:/usr/local/nginx/html,子目录路径为:/usr/local/nginx/html/your_folder,此时Nginx应该这样配置:

location / {
  try_files $uri $uri/ /your_folder/index.html;
}

  重点是要加 /your_folder/index.html

Nginx 转发时Header中信息丢失

  通过Nginx转发后, Header中access_token信息丢失,经查,发现Nginx在转发时,header中带下划线_的属性默认不转发,需要增加配置:

underscores_in_headers on;

如下所示:

server {
        listen       80;
        server_name  127.0.0.1;
        
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        underscores_in_headers on;
		...(其他略)
}
Logo

前往低代码交流专区

更多推荐