袁洪盛的个人博客
vue3 vue-router去掉 #
发布于 2023年11月20日热度 1316
在 Vue 3 中,如果使用的是 Vue Router 并且想要在打包后的应用程序中去掉 URL 中的 #
(即 hash 模式),需要使用历史模式(History Mode),这通常是通过 HTML5 History API 实现的。
要在 Vue Router 中使用历史模式,需要在创建路由实例时指定 history
配置选项,并使用 createWebHistory
函数。以下是如何设置的一个例子:
import { createRouter, createWebHistory } from 'vue-router';
// 路由定义
const routes = [
// ...定义路由
];
// 创建路由实例
const router = createRouter({
history: createWebHistory(import.meta.env.VITE_BASE_URL), // 使用历史模式
routes,
});
export default router;
注意,import.meta.env.VITE_BASE_URL 是应用基础路径,在使用Vite的情况下,创建.env.production文件,配置环境变量。
例如,如果应用部署在服务器根目录下,可以将其设置为 /:
VITE_BASE_URL=/
如果应用部署在子路径下,比如 /my-app/,那么应该设置:
VITE_BASE_URL=/my-app/
注意:在 Vite 中,所有的环境变量都需要以 VITE_ 开头才能在客户端代码中访问。
当使用历史模式时,服务器需要配置以支持所有的路由。因为在历史模式下,URL 看起来像正常的 path
,所以当用户直接访问或刷新页面时,服务器需要正确地返回应用程序的 index.html
文件。如果服务器没有正确配置,用户可能会收到 404 错误。
对于不同的服务器,配置方式可能会有所不同。以下是一些常见的服务器配置示例:
Apache
在 Apache 服务器上,你可以使用 .htaccess
文件来配置重写规则:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Nginx
在 Nginx 服务器上,你可以在配置文件中添加一个 try_files
指令:
location / {
try_files $uri $uri/ /index.html;
}