history 路由模式的 web 应用程序部署时的注意事项

前言

history 路由模式是一种使用HTML5 History API 的路由方案,它可以使 Web 应用程序在不刷新页面的情况下动态更新 URL,并且支持前进和后退按钮。

在使用 history 路由模式时,通常需要将所有的 URL 请求都重定向到 index.html 页面,然后再由 JavaScript 代码根据 URL 解析需要展示的组件。

在部署一个使用 history 路由模式的 Web 应用程序时,由于所有的 URL 都需要重定向到 index.html 页面,因此需要在部署文件(如 Apache 或 Nginx 的配置文件)中添加一个特殊的配置,将所有请求都指向 index.html 页面。这个配置通常称为 "fallback" 或 "catch-all" 配置。

如果不添加这个特殊的配置,当用户直接访问一个使用 history 路由模式的 URL 时,服务器会返回 404 错误,这会给用户带来很不好的体验。因此,为了确保 Web 应用程序可以正常运行,并提供良好的用户体验,需要在部署文件中添加这个配置。

两种解决方法

Apache

  1. 在打包后的web包中新建 WEB-INF 文件夹

  2. 新建 web.xml 文件

  3. 将一下内容添加到 web.xml 文件中

    xml 复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="<http://java.sun.com/xml/ns/javaee>"
      xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
      xsi:schemaLocation="<http://java.sun.com/xml/ns/javaee>
                          <http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd>"
      version="3.0"
      metadata-complete="true">
    
      <display-name> {your-project-name} </display-name>
      <description>
         {your-project-name}
      </description>
      <error-page>  
       <error-code>404</error-code>  
       <location>/index.html</location>  
    	</error-page>  
    </web-app>
  • {your-project-name} 更改为你的项目名称
  • error-page 标签下的内容表示,当页面404时重定向到 /index.html 页面,以达到用户在访问 URL 时总是重定向到,index.html 页面,该页面的 JavaScript 代码解析所要展示的组件。

Nginx

在nginx配置文件中添加:

ini 复制代码
server {
    listen 80;
    server_name example.com;

    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}
  • listen:监听的端口号。
  • server_name:Web 应用程序的域名或 IP 地址。
  • root:Web 应用程序的根目录。
  • index :默认的索引文件,这里是 index.html
  • location / :处理所有请求的位置块。
  • try_files :尝试查找指定的文件,如果找不到则将请求重定向到 /index.html

使用上述配置后,Nginx 会尝试查找请求的文件,如果找不到则将请求重定向到 /index.html 页面。这样,当用户直接访问使用 history 路由模式的 URL 时,Nginx 就会将请求重定向到 /index.html 页面,然后由 JavaScript 代码来解析 URL,并加载对应的组件。

相关推荐
最逗前端小白鼠9 分钟前
vue3 数据响应式遇到的问题
前端·vue.js
倚栏听风雨33 分钟前
ts中 ?? 和 || 区别
前端
冴羽38 分钟前
请愿书:Node.js 核心代码不应该包含 AI 代码!
前端·javascript·node.js
我家猫叫佩奇40 分钟前
一款灵感源自《集合啦!动物森友会》的 UI 组件库
前端
mmmmm1234242 分钟前
深入 DOM 查询底层:HTMLCollection 动态原理与 querySelectorAll 静态快照解析
前端·javascript
weixin199701080161 小时前
《TikTok 商品详情页前端性能优化实战》
前端·性能优化
闲坐含香咀翠1 小时前
告别二次登录!Web端检测并唤起Electron客户端实战
前端·客户端
岁月宁静1 小时前
都知道AI大模型能生成文本内容,那你知道大模型是怎样生成文本的吗?
前端·vue.js·人工智能
花间相见1 小时前
【终端效率工具01】—— Yazi:Rust 编写的现代化终端文件管理器,告别繁琐操作
前端·ide·git·rust·极限编程
|晴 天|2 小时前
我如何用Vue 3打造一个现代化个人博客系统(性能提升52%)
前端·javascript·vue.js