GioGio 的 Blog

Apache 适配 Vue3 History 模式

2026-10-13apache,前端,教程,分享
# Apache 适配 Vue3 History 模式

前语:网站已经大致成型,但是有点小问题,在此研究一下。问题是网站刷新时会出现路由丢失404问题。现在要对apache进行修复。服务器是Ubuntu server ,Ubuntu apache配置文件没有所谓的`/etc/httpd.conf/`,取而代之的是`/etc/apache2/apache2.conf`。

## 一、开启Apache 重写模块

###### 1.为什么要开启apache重写模块?

- 本质是为了**用正则规则动态操控 URL**,解决伪静态、SEO、域名迁移、防盗链、路由美化等刚需,是现代网站部署的基础能力。

- 单页应用(SPA)路由支持,把所有请求重写到 `index.html`,由前端路由接管。

- 多域名统一(规范主域名)`www.xxx.com` 和 `xxx.com` 统一跳转到主域名。

###### 2.不开启会怎样?

- 动态 URL 丑陋

- SPA history 模式无法使用,刷新 404

- **无法在 `.htaccess` 中配置路由规则**

###### 3.如何开启Apache 重写模块

1. 终端输命令:`sudo a2enmod rewrite`

2. 重启 Apache 生效:`sudo systemctl restart apache2`

## 二、修改网站配置文件

Ubuntu 站点配置默认路径:`/etc/apache2/sites-available/000-default.conf`,编辑找到 `<VirtualHost *:80>` 里面,**添加一段目录规则**:

```apacheconf
<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All   #允许 .htaccess 伪静态生效
    Require all granted
</Directory>
```

## 三、项目根目录建 .htaccess

apache默认根目录为:`/var/www/html`在里面新建 `.htaccess`规则文件:

```.htaccess
<IfModule mod_rewrite.c>         #如果服务器开启了重写模块,就执行下面的规则。
    RewriteEngine On             #打开重写功能
    RewriteBase /                 #根目录开始
    RewriteCond %{REQUEST_FILENAME} !-f     #如果用户访问的路径,不是一个真实存在的文件
    RewriteCond %{REQUEST_FILENAME} !-d    #并且,用户访问的路径,也不是一个真实存在的文件夹。
    RewriteRule ^(.*)$ index.html [L]        #那么,把这个请求,全部交给 index.html 处理。
</IfModule>
```

保存完成后,重启apache:`sudo systemctl restart apache2`即可验证刷新还报不报错。



> 结语:这样做的本质是让 Apache 把 “不存在的路径”,全部交给 Vue 来处理,而不是直接报 404。
> 
> 比如xxx.com/home,xxx.com/user/123,这些路径没有具体的文件,apache搜不到后会移交给vue的router来完成。




相关文章