vue地址去掉 #

本文介绍如何在Vue项目中使用history模式替代默认的hash模式,以美化URL,并详细讲解了在IIS后端服务下进行相应配置的方法,包括正则表达式的使用,确保前端路由与后端无缝对接。
公众号:前端很忙

vue-router 设置 history 模式

vue 项目往往会搭配 vue-router 官方路由管理器,它和 vue.js 的核心深度集成,让构建单页面应用变得易如反掌。vue-router 默认为 hash 模式,使用 URL 的 hash 来模拟一个完整的 URL,所以当 URL 改变时,页面不会重新加载,只是根据 hash 来更换显示对应的组件,这就是所谓的单页面应用。

但是使用默认的 hash 模式时,浏览器 URL 地址中会有一个 # ,这跟以往的网站地址不太一样,可能也会让大部分人不习惯,甚至觉得它很丑。

想要去掉地址中的 # 也不难,只要更换 vue-router 的另一个模式 history 模式即可做到。

公众号:前端很忙

当你使用 history 模式时,URL 就变回正常又好看的地址了,和大部分网站地址一样,例如:http://zhengchang.com/name/id

不过,这种模式有个坑,不仅需要前端开发人员将模式改为 history 模式,还需要后端进行相应的配置。如果后端没有正确的配置好,当你访问你的项目地址时,就会出现 404 ,这样可就更不好看了。

官方给出了几种常用的后端配置例子:

  • Apache
公众号:前端很忙
  • nginx
公众号:前端很忙
  • 原生 Node.js
公众号:前端很忙
  • Internet Information Services (IIS)
公众号:前端很忙

因为我的项目后端服务是 IIS ,所以就着重分享一下 IIS 的相关配置


IIS 后端配置

首先,前端将 vue-router 模式修改为 history 模式,开发完成并打包后,将文件部署到站点。站点的根目录会有一些相关配置文件,这些后端人员会很清楚,前端开发只需要告诉后端人员如何写去掉 # 的配置文件。

在站点的根目录创建一个 web.config 文件,内容如上图所示。起到关键作用的是 rewrite 标签中的代码:

  • rule 标签:代表定义的一条规则。

  • match 标签:你的规则是什么要求,url 属性内容就是要求(正则表达式)。

  • action 标签:type 属性为 Rewrite(重写),url 属性为目标。意思是:如果满足 match 标签中 url 属性的正则,就执行此配置(将符合match标签url要求的地址,重写为action标签中url属性的地址)。

这个配置就和重定向一样,将符合你要求的地址,重定向为你想要的地址。下面是我的项目中 IIS 的配置:

公众号:前端很忙

我的要求是,除了 “api” 或者 “token” 开头的地址,全部重定向为 " / " ,因为我的接口地址是 api 和 token 开头的,所以接口地址不能变。

公众号:前端很忙
公众号:前端很忙

然后服务端设置的是默认显示目录下的 index.html ,而这个 index.html 文件就是前端打包后生成的 html 文件。网站打开了 html 文件,执行对应脚本,就会按照你的路由设置显示对应的组件内容,浏览器地址中的 # 也被替换掉了。

还有一个 rule 标签是配置我的图片路径的。

图片在开发环境中,都按照对应的组件,分类放到不同的文件夹中,例如:home 组件中的 banner 图,路径是 “ assets/home/banner.png ”。

我的项目打包后,生成了 index.html 和 static 文件夹,js、css、img等文件夹都在 static 中。所有的图片全都放在“ /static/img/ ”下面,图片路径也会自动更改为“ ./static/img/ ”。

我不希望图片路径重定向为“ / ”,所以规则就是:将符合“ ./static/img/name.png ”重定向为“ /static/img/name.png ”。

公众号:前端很忙

配置里的最难的可能是那个正则表达式,根据不同的需求配置不同的正则表达式,搞定正则就大功告成了!

如果觉得有帮助,就分享给你觉得需要的朋友吧!

公众号:前端很忙

更多分享,关注前端公众号【前端很忙】

<think>好的,我现在需要帮助用户解决如何在Vue应用中移除URL中的#号,切换到HTML5模式的问题。首先,我得回忆一下Vue Router的相关知识。记得Vue Router有两种模式:hash模式和history模式。默认情况下使用的是hash模式,也就是URL中会带有#符号,而用户想要去掉这个#,所以需要切换到history模式。 根据引用4的内容,hash模式通过改变URL的hash部分来导航,而不会触发页面重新加载,这对SPA来说很重要。而history模式则利用了HTML5的History API,使用pushState和replaceState方法来改变URL而不发送请求。用户需要切换到history模式,也就是HTML5模式,来去掉#号。 接下来,我需要告诉用户如何配置Vue Router来使用history模式。在Vue Router的配置中,设置mode为&#39;history&#39;即可。例如,在创建router实例时,传入mode: &#39;history&#39;选项。引用1中的代码片段显示,当mode设置为&#39;history&#39;时,使用pushState方法来改变URL,这正是用户需要的。 但用户可能不知道,仅仅在前端配置还不够,还需要服务器端的支持。因为当用户直接访问一个深链接(比如/about)时,如果服务器没有正确配置,会返回404错误。因此,需要服务器将所有请求重定向到首页,比如index.html,让前端路由来处理路径。常见的服务器如Apache、Nginx等需要做相应的配置。比如在Nginx中添加try_files指令,将所有请求指向index.html。 另外,用户可能需要处理路由的滚动行为。引用2中提到,可以使用scrollBehavior方法,结合savedPosition来保持滚动位置,尤其是当使用keep-alive缓存组件时。这部分虽然不是切换模式的核心,但可能对用户体验有帮助,可以提一下。 还有引用3中提到的关于重置matcher的内容,可能和动态路由相关,但当前问题主要关于模式切换,可能不需要深入讨论这部分,除非用户有其他动态路由的需求,可以暂时忽略。 最后,需要提醒用户注意事项,比如服务器配置和404页面的处理。如果没有正确的服务器配置,直接访问路径会导致404,因此建议在Vue应用中添加一个404路由作为兜底。 总结步骤:1. 修改Vue Router配置,设置mode为history;2. 配置服务器支持history模式;3. 处理可能的滚动行为;4. 添加404路由。同时给出示例代码,确保用户能正确修改router的配置,并了解服务器配置的基本方法。</think>要移除Vue Router默认的hash模式(URL中的`#`符号),需切换为HTML5 history模式。以下是具体操作步骤和注意事项: --- ### 一、基础配置 在Vue Router初始化配置中设置`mode: &#39;history&#39;`: ```javascript // router/index.js import VueRouter from &#39;vue-router&#39; const router = new VueRouter({ mode: &#39;history&#39;, // 核心配置项 routes: [...] }) ``` 此时URL将变为`http://example.com/path`(无`#`符号)[^4] --- ### 二、服务器配置 **必须配置服务器支持**,否则直接访问非首页路由会返回404错误。常见服务器配置示例: 1. **Nginx**: ```nginx location / { try_files $uri $uri/ /index.html; } ``` 2. **Apache**: ```apache <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule> ``` --- ### 三、其他注意事项 1. **前端404处理**: 添加通配符路由作为兜底: ```javascript { path: &#39;*&#39;, component: NotFoundComponent } ``` 2. **路由跳转优化**: 使用`router.push()`代替`<a>`标签跳转,避免页面刷新: ```vue <router-link :to="/about">About</router-link> ``` 3. **滚动行为控制**(可选): 若需保持滚动位置,可配置`scrollBehavior`: ```javascript const router = new VueRouter({ scrollBehavior(to, from, savedPosition) { return savedPosition || { x: 0, y: 0 } } }) ```[^2] --- ### 四、模式对比 | 特性 | Hash模式 | History模式 | |-------------------|-----------------------------|-----------------------------| | URL美观度 | 带`#`符号 | 无`#`符号 | | SEO支持 | 需特殊处理 | 更友好 | | 服务器要求 | 无需特殊配置 | 必须配置重定向规则 | | 兼容性 | 支持所有浏览器 | 需HTML5支持(IE10+) |[^4] ---
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值