You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue项目Apache部署:URL需含文件夹名,需配置vue-router还是服务器?

解决Vue项目部署Apache后刷新问题+自定义URL路径的方案

兄弟,你这个情况需要同时配置Vue Router和Apache服务器才能彻底搞定——既要让前端路由适配新的URL路径,也要让Apache能正确处理刷新时的请求,我给你一步步拆解:

一、先给Vue Router配置基础路径

因为你要让应用的URL前缀是/foldername/app/,首先得让Vue Router和打包工具明确这个基础路径,不然打包出来的资源路径、路由链接都会出错。

1. 配置Vue Router的base参数

假设你的路由文件是src/router/index.js,如果用的是Vue 3的createWebHistory模式(这也是你刷新出问题的核心原因,hash模式不会有这类问题),修改成这样:

import { createRouter, createWebHistory } from 'vue-router'
import YourRoutes from './routes' // 你的路由列表

const router = createRouter({
  // 这里指定基础路径,结尾的斜杠别遗漏
  history: createWebHistory('/foldername/app/'),
  routes: YourRoutes
})

export default router

2. 配置项目的publicPath(Vue CLI项目)

打开项目根目录的vue.config.js(没有的话直接新建一个),添加publicPath配置,确保打包后的资源都基于这个路径加载:

module.exports = {
  publicPath: '/foldername/app/'
}

改完之后重新执行npm run build生成新的dist文件夹,把这个新dist里的文件部署到Apache服务器的/foldername/app/目录下(比如Apache默认根目录是/var/www/html,那你就把文件放到/var/www/html/foldername/app/里)。

二、给Apache配置重写规则解决刷新404

这一步是关键!Vue的history模式下,刷新页面时浏览器会直接向Apache请求/foldername/app/xxx这个路径,但Apache会误以为这是真实的文件/目录,找不到就返回404。我们需要让Apache把所有不存在的文件/目录请求都转发到index.html,交给Vue Router来处理。

方法1:修改Apache主配置或虚拟主机配置

找到你的Apache配置文件(比如httpd.conf或者/etc/apache2/sites-available/your-site.conf),添加以下配置:

# 替换成你实际部署dist文件的目录路径
<Directory "/var/www/html/foldername/app">
  Options -Indexes +FollowSymLinks
  AllowOverride All
  Require all granted

  RewriteEngine On
  # 如果请求的不是真实文件/目录,就转发到index.html
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ /foldername/app/index.html [L]
</Directory>

配置完后重启Apache服务(比如执行sudo systemctl restart apache2)。

方法2:用.htaccess文件(更灵活,适合不能改主配置的场景)

如果你的Apache允许使用.htaccess(要确保AllowOverride All已经开启),直接在你部署的/foldername/app/目录下新建一个.htaccess文件,内容如下:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /foldername/app/
  # 直接访问index.html就跳过规则
  RewriteRule ^index\.html$ - [L]
  # 非真实文件/目录就转发到index.html
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /foldername/app/index.html [L]
</IfModule>

为什么要同时配置?

  • Vue Router的配置是让前端明确“自己在哪个路径下运行”,生成的链接、加载的资源都不会跑偏;
  • Apache的重写规则是解决刷新时的404问题——毕竟刷新是直接请求服务器,得让服务器把请求交给Vue的前端路由来处理。

这样配置完之后,你就能通过ip-address/foldername/app访问应用,刷新也不会出问题了。

内容的提问来源于stack exchange,提问作者dcdcc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:43:27