本篇讲解前端项目的路由模式(以vue-router为例),以及history模式下的项目部署问题。

vue-router的路由模式可以通过指定mode属性值控制,可选值:"hash" 、"history"、 "abstract" , 默认:"hash" (浏览器环境) , "abstract" (Node.js 环境)

const router = new VueRouter({
mode: 'history',
routes: [...]
})

路由表里的兜底配置

hash与history

Hash模式

通过 onhashchange 方法监听hash的改变来实现

  • Hash模式是基于锚点,以及onhashchange事件
  • URL中#后面的内容作为路径地址
  • 监听hashchange事件
  • 根据当前路由地址找到对应组件重新渲染

History模式

通过 onpopstate 方法监听history的改变来实现

  • History模式是基于HTML5中的History API
  • 通过history.pushState()方法改变地址栏 IE 10 以后才支持
  • 监听popstate事件
  • history.replaceState()
  • 根据当前路由地址找到对应组件重新渲染

History模式的使用,以及nginx配置

  • History 需要服务器的支持
  • 单页应用中,服务端不存在http://www.testurl.com/login这样的地址,会返回找不到该页面
  • 在服务端应该除了静态资源外都返回单页应用的index.html,比如:http://www.testurl.com/login.html

history需要服务器支持,我们使用node或nginx

http://localhost:8080/main/home

nginx处理方式

在nginx的html根目录部署一个项目,然后新开一个文件夹,部署另一个项目,nginx.conf

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

try_files:

  • $uri: 当前请求路由

    这句话意思是尝试请求当前路由,如果请求不到,就返回当前目录下的index.html

nginx root 和 alias 的区别

location  /i/ {
alias /spool/w3/images/;
}
# "/i/top.gif" -> "/spool/w3/images/top.gif" location /i/ {
root /spool/w3;
}
# "/i/top.gif" -> "/spool/w3/i/top.gif"
  1. alias把匹配到的路径重写, 注意要以/结尾

  2. root在匹配到的路径前面,增加root基础路径配置

配置完nginx.conf之后,重启nginx

问题

我的应用部署在一个子路径(/lily/)上,访问路径: https://www.xxxx/lily/

1、浏览器访问,显示空白页面,chunk加载失败



2、浏览器直接访问 /static/目录,显示403

3、访问 /main/home,显示nginx页面

4、页面刚进入可以正常显示,刷新之后就显示404

页面刚进入是redirect指向的资源可以正常加载,刷新后404一般来说就是配置和真实的路径不符合,需要指定try_files

5、首页可以正常显示,刷新页面或者跳转到别的页面报错

Uncaught SyntaxError: Unexpected token '<'

问题解决:

看起来像是跟root的配置有关,修改打包部署路径,和应用基路径base。

publicPath: IS_PROD ? '/lily/' : '/',
new Router({
mode: 'history',
base: '/lily/',
routes,
});

可以正常访问了




我是 甜点cc,个人网站: https://blog.i-xiao.space/

苏格拉底:“我知道我不知道。”

公众号:【看见另一种可能】

vue-router之hash与history,以及nginx配置的更多相关文章

  1. Vue路由器的hash和history两种工作模式 && Vue项目编译部署

    1 # 一.Vue路由器的两种工作模式 2 # 1.对于一个uri来说,什么是hash值? 井号及其后面的内容就是hash值. 3 # 2.hash值不会包括含在HTTP请求中,即:hash值不会带给 ...

  2. vue中mode hash 和 history的区别

    对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...

  3. vue路由history模式,nginx配置

    nginx配置内容 # For more information on configuration, see: # * Official English Documentation: http://n ...

  4. Vue Router的原理及history模式源码实现

    Hash 模式 URL中 # 后面的内容作为路径地址,可以通过location.url直接切换路由地址,如果只改变了#后面的内容,浏览器不会向服务器请求这个地址,会把这个地址 记录到浏览器的访问历史中 ...

  5. nginx----------前端写了一套带有vue路由的的功能。放到nginx配置的目录下以后,刷新会报404未找到。

    1. 这是根据实际情况来写的. location /h5/activity/wechat/ {            index  index.html index.htm index.php;    ...

  6. vue router mode 设置"hash"与"history"的区别

    router官网的说明如下: ********************************************我是官网说明分隔符--开始**************************** ...

  7. vue 路由里面的 hash 和 history

    对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...

  8. Vue路由的hash模式与history模式的区别?

    1.首先router有两种模式:hash模式(默认).history模式(需配置mode: 'history') hash和history的区别?   hash                    ...

  9. vue cli 3.x的history 和 hash模式切换的问题

    使用vue cli 3.x 创建的项目,有一个选项:Use history mode for router? (Requires proper server setup for index fallb ...

  10. vue & $router & History API

    vue & $router gotoTemplateManage(e) { e.preventDefault(); this.$router.push({ path: `/operate-to ...

随机推荐

  1. GitLab服务器傻瓜式搭建教程

    开始前的准备 需要有一台Linux系统的服务器或虚拟机 QAQ 安装包下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ 注* 本教程无需下载安装 ...

  2. 系统建模之UML状态图[转载]

    1 状态图的简介(Instrduction) 状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event) ...

  3. 【解释器设计模式详解】C/Java/Go/JS/TS/Python不同语言实现

    简介 解释器模式(Interpreter Pattern)是一种行为型设计模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式常被用在 SQL 解析.符号处理引擎等. 解释器模式常 ...

  4. 去掉Bom头的方法和为什么要清除Bom头

    什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也 ...

  5. msp430点灯实验

    title: msp430点灯实验 date: 2023-04-15 15:31:25 description: 基于msp430f5529点灯实验 一.实验内容 使用开发板:msp430f5529 ...

  6. Hyperledger Fabric 使用 CouchDB 和复杂智能合约开发

    前言 在上个实验中,我们已经实现了简单智能合约实现及客户端开发,但该实验中智能合约只有基础的增删改查功能,且其中的数据管理功能与传统 MySQL 比相差甚远.本文将在前面实验的基础上,将 Hyperl ...

  7. PHPCMSV9 单文件上传功能代码

    后台有"多文件上传"功能,但是对于有些情况,我们只需要上传一个文件,而使用多文件上传功能上传一个文件,而调用时调用一个文件太麻烦了. 所以我就自己动手,参考其他字段类型的网站,研究 ...

  8. Go/Python 基于gRPC传输图片

    python程序作为服务端,Go程序作为客户端,基于gPRC进行通信 客户端 定义proto文件: syntax = "proto3"; option go_package = & ...

  9. Docker入门实践笔记-Dockerfile

    镜像是一个打包文件,其中包含了应用程序及其运行所依赖的环境,例如文件系统.环境变量.配置参数等等 联合文件系统 容器镜像内部并不是一个平坦的结构,而是由许多的镜像层组成,每层都是只读不可修改修改的一组 ...

  10. 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!

    开心一刻 中午和哥们一起喝茶 哥们说道:晚上喝酒去啊 我:不去,我女朋友过生日 哥们瞪大眼睛看着我:你有病吧,充气的过什么生日 我生气到:有特么生产日期的好吧 需求背景 系统对接了外部系统,调用外部系 ...