How to remove hashbang (#) from URL in Vue ?

featured Image

In this short tutorial we will learn how to remove hash (#) from Url in Vue app with Vue-Router.

In Vuejs, a URL with a hashbang that looks like this :

/#/house

So in this article we will use the history Mode to change the url to this:

/house

Remove Hash from URL in Vue-Router 2.0 and 3.0

In Vue-Router 3.0, the default mode of vue-router is hash mode i.e you will see the URL as /#/house .

The purpose of hashbang (#) is to initiate a file-path without having to setup any server configuration.

To get rid of the hash from the URL we have to change the mode of the router to history mode from hash mode in main.js file.

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

In main.js, we have a Vue Router instance with an object that have a route and a mode property. We just have to change the mode property to history.

So now whenever we visit a route eg /house, it will take us to /house instead of /#/house.

Remove Hashbang from URL in Vue Router 4.0

In Vue Router 4.0, the default mode of history will be createWebHashHistory(). And just like the previous version, it will add a # internally to your URL.

To remove the hash we have to change the history from createWebHashHistory() to createWebHistory() in your router file.

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    //...
  ],
})

Note :

Since our app is a single page application without any proper server configuration, it will show us 404 error if we navigate to a nested URL https://example.com/user/id from our browser.

So to solve this issue we will have to create a fall back route to the server. So if a URL doesn’t match a page it will show a default index.html page.

Create catch-all fallback route for Vue Router

To create a catch-all fallback route in Vue 2 and 3 add the following line in your Vue Router instance in main.js file.

const router = new VueRouter({
  mode: 'history',
  routes: [
    { 
      path: '/:catchAll(.*)', 
      component: NotFoundComponent,
      name: 'NotFound'
    }
  ]
})

More details in this page.

And for Vue 3 and Vue Router 4 add the following line in the router file.

const router = createRouter({
  history: createWebHistory(),
  routes: [{ path: '/:pathMatch(.*)', component: NotFoundComponent }],
})

Related Topics:

Set URL Query Params In Vue Using Vue-Router

How To Redirect To External Url In Vue

How To Add Common Header And Footer In Vuejs.

How To Change Default Port Number In Vue-Cli?

Related Posts

featured Image

How to add common header and footer in vuejs.

Here, in this article, we will learn how to add a common header and footer component in our vuejs application. In general, we always have the same header and footer…

Read more
featured Image

How to call a function in VUE template?

Here, we will learn on how to call a function in vue template. First, we have to define the function in the methods. and then we can use an event…

Read more
featured Image

How to redirect to external url in vue

Here, we will learn how to redirect to an external URL in vuejs application. Page Navigation is one of the basic features of a website. It helps us to navigate…

Read more