vue3+vite+router4项目打包后在apache环境下运行更改默认/地址

Vue项目配置history模式及Apache服务器部署
本文介绍了在Vue项目中如何将路由模式改为history,并详细阐述了打包后在Apache服务器上部署的步骤,包括修改router.js、vite.config.js配置,以及Apache的httpd.conf设置和.htaccess文件的创建。确保项目可以通过/m路径正常访问。

路由模式为history时,打包完成后的项目,路由跳转默认是/,也就是服务器的根路径地址,更改步骤如下:

1. src/router/router.js 路由配置文件

import { createRouter, createWebHistory } from "vue-router"
// createWebHashHistory  createWebHistory
//组件vue导入
const app_title = "页面标题";
//定义路由常量
const routes = [

    //初始路由
    // {
    //     name: '/',
    //     path: "/",
    //     redirect: {
    //         name: 'register',
    //     }
    // },
    {
        path: '/',
        name: 'index',
        component: () => import('@/admin/index.vue'),
        children: [{
            path: '/',
            name: 'adminHome',
            component: () => import('@/admin/home.vue'),
        },{
            path: 'center',
            name: 'center',
            component: () => import('@/admin/Center.vue'),
        },{
            path: 'order',
            name: 'order',
            component: () => import('@/admin/order.vue'),
        }]
    },
    {
        name: 'login',
        path: '/login',
        component: () => import('@/admin/Login.vue'),
        meta: {
            title: app_title,
        },
    },
    {
        name: 'register',
        path: '/register',
        component: () => import('@/admin/Register.vue'),
        meta: {
            title: app_title,
        },
    },

];

const router = createRouter({
	history: createWebHistory('/m/'),
	routes, // `routes: routes` 的缩写
})

//导入配置好的路由对象
export default router;

2. vite.config.js (配置base为目录地址’/m/’)

//import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const { resolve } = require('path')
// https://vitejs.dev/config/
export default({
	// 起个别名,在引用资源时,可以用‘@/资源路径’直接访问
	resolve: {
		alias: {
			"@": resolve(__dirname, "src"),
		},
	},
	plugins: [
		vue(),
	],
	base: '/m/', 
    // 配置前端服务地址和端口
    server: {
        host: '127.0.0.1',
        port: 3000,
        // 是否开启 https
        https: false,
    },

})                                                               

3. 修改Apache中httpd.conf文件,开启rewrite_module功能:

  1. LoadModule rewrite_module libexec/apache2/mod_rewrite.so,去掉前面的#,打开注释。

  2. 找到 AllowOverride None 的那行,把它改成 AllowOverride All,来使 .htaccess 文件生效。

  3. 在apache的www/m目录下创建.htaccess文件

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /m/index.html [L]
</IfModule>

  1. 将vite项目npm run build打包好的文件放入www/m目录中,使用localhost/m 就可以访问了
    在这里插入图片描述
<think>嗯,用户遇到了Vue3Vite项目部署后页面白屏且路由不跳转的问题。我需要根据提供的引用资料来分析可能的原因和解决方案。首先,看看引用中的类似问题。 引用[1]提到路由配置正确但页面空白,报错是模块加载问题,可能与路径有关。可能是静态资源路径错误或者vite配置中的base没设置正确。需要检查部署环境的base路径,比如是否在子目录下,需要设置base为&#39;./&#39;。 引用[2]讨论的是动态路由的异步问题。如果路由添加是异步的,可能在路由守卫中未正确等待数据加载,导致addRoute没执行完就跳转。用户需要检查路由守卫中是否有await处理异步操作,确保动态路由添加完成后再跳转。 引用[3]指出多级路由需要正确使用<router-view>,如果组件结构不对可能导致空白。用户需要确认每个层级的路由组件都包含<router-view>,并且外层是否有必要的容器元素,比如<div>包裹。 引用[4]提到动态路由刷新后空白,可能因为刷新后路由未重新添加。解决方案包括在路由守卫中每次刷新都重新获取权限并addRoute,以及添加404路由捕获未匹配路径。同时,需要处理动态路由加载失败的情况,比如使用404页面。 综合这些引用,可能的原因包括:静态资源路径错误、动态路由未正确加载、路由守卫逻辑问题、路由组件结构错误、缺少404处理。解决方案需要逐一排查这些方面,比如配置base路径、确保异步加载完成、检查路由守卫逻辑、正确使用<router-view>、添加404路由等。另外,用户应该检查控制台错误和网络请求,确认资源是否正确加载,是否有JS报错导致应用崩溃。</think>### Vue3+Vite部署后页面白屏及路由不跳转解决方案 #### 一、静态资源路径配置问题 1. **设置`vite.config.js`中的base路径** 在项目根目录的`vite.config.js`中添加: ```javascript export default defineConfig({ base: &#39;./&#39;, // 相对路径模式 }) ``` 该配置适用于部署到非根目录的场景,例如GitHub Pages的子目录部署[^1]。 2. **检查路由模式兼容性** 如果使用`createWebHistory`模式,需要确保服务器已配置URL重定向规则。建议开发环境使用: ```javascript import { createWebHashHistory } from &#39;vue-router&#39; const router = createRouter({ history: createWebHashHistory(), }) ``` #### 二、动态路由加载问题 1. **确保异步路由已加载完成** 在路由守卫中需要等待权限数据加载完成: ```javascript router.beforeEach(async (to, from) => { if (需要权限校验的路由) { await store.dispatch(&#39;loadUserMenus&#39;) // 等待接口返回 hasRoles = false return to.fullPath // 重新触发导航 } }) ``` 通过`console.log(router.getRoutes())`验证路由是否成功添加[^2]。 2. **处理动态路由刷新失效** 在`app.vue`中监听路由变化: ```javascript onMounted(() => { window.addEventListener(&#39;hashchange&#39;, () => { location.reload() }) }) ``` #### 三、组件结构验证 1. **多层路由嵌套规范** 每个路由层级需要对应的`<router-view>`容器,三级路由示例: ```vue <!-- 一级路由组件 --> <template> <div> <router-view /> </div> </template> <!-- 二级路由组件 --> <template> <section> <router-view /> </section> </template> ``` 缺少容器元素会导致渲染失败[^3]。 #### 四、服务器配置优化 | 服务器类型 | 配置要点 | |------------|----------------------------------| | Nginx | 添加`try_files $uri $uri/ /index.html` | | Apache | 启用`mod_rewrite`模块并配置.htaccess | | IIS | 安装URL重写模块并设置规则 | #### 五、错误排查流程 1. 打开浏览器开发者工具,检查控制台是否有资源加载错误 2. 查看Network面板确认`index.html`和JS文件返回200状态 3. 使用`router.addRoute`后打印完整路由表验证 4. 在`main.js`添加全局错误捕获: ```javascript app.config.errorHandler = (err) => { console.error(&#39;Vue Error:&#39;, err) } ``` #### 六、补充解决方案 1. 添加404兜底路由: ```javascript { path: &#39;/:pathMatch(.*)*&#39;, redirect: &#39;/error-page&#39; } ``` 2. 处理动态加载失败场景: ```javascript const routes = [ { path: &#39;/dashboard&#39;, component: () => import(&#39;./views/Dashboard.vue&#39;).catch(() => { window.location.reload() }) } ] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值