Wie entferne ich Hashbang von der URL?


257

Wie entferne ich Hashbang #!von der URL?

Ich habe die Option zum Deaktivieren von Hashbang in der Dokumentation zum Vue-Router ( http://vuejs.github.io/vue-router/en/options.html ) gefunden, aber diese Option wird entfernt #!und einfach eingefügt#

Gibt es eine Möglichkeit, eine saubere URL zu haben?

Beispiel:

NICHT: #!/home

ABER: /home

Antworten:


484

Sie würden eigentlich wollen einfach nur Satz modezu 'history'.

const router = new VueRouter({
  mode: 'history'
})

Stellen Sie jedoch sicher, dass Ihr Server für die Verarbeitung dieser Links konfiguriert ist. https://router.vuejs.org/guide/essentials/history-mode.html


4
Danke Bill hier können Sie Hashbang entfernen. Falsch hier ist auch der Code:const router = new VueRouter({ history: true })
DokiCRO

2
Ich habe mit github.com/vuejs/vue-hackernews gespielt und {history: true}Werke für die erste Seite hinzugefügt , aber der Rest der Routen ist fehlgeschlagen.
Hari KT

Sie meinen, wenn Sie die App auf anderen Routen neu laden? In diesem Fall müssen Sie Ihren Server ordnungsgemäß konfigurieren.
Bill Criswell

Bitte machen Sie vue.js 2 Informationen am Anfang der Antwort
Diralik

2
In welcher Datei soll es hinzugefügt werden?
Derzu

81

Verwenden Sie für vue.js 2 Folgendes:

const router = new VueRouter({
 mode: 'history'
})

5
Was ist der Unterschied zwischen dieser Antwort und der hier akzeptierten Antwort?
Ilyas Karim

15
Die akzeptierte Antwort wurde bearbeitet, nachdem Sie festgestellt haben, dass dies die Lösung ist. Sie können das Bearbeitungsprotokoll der akzeptierten Antwort überprüfen.
Israel Morales

22

Hash ist eine Standardeinstellung für den Vue-Router-Modus. Sie wird festgelegt, da die Anwendung bei Hash keinen Server verbinden muss, um die URL bereitzustellen. Um dies zu ändern, sollten Sie Ihren Server konfigurieren und den Modus auf den HTML5-Verlaufs-API-Modus einstellen.

Bei der Serverkonfiguration ist dies der Link, über den Sie Apache-, Nginx- und Node.js-Server einrichten können:

https://router.vuejs.org/guide/essentials/history-mode.html

Dann sollten Sie sicherstellen, dass der Vue-Router-Modus wie folgt eingestellt ist:

vue-router version 2.x.

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

Dies sind alle Vue-Router-Modi, die Sie auswählen können: "Hash" | "Geschichte" | "abstrakt".


20

Für Vuejs 2.5 und Vue-Router 3.0 hat oben nichts für mich funktioniert, aber nach einigem Herumspielen scheint Folgendes zu funktionieren:

export default new Router({
  mode: 'history',
  hash: false,
  routes: [
  ...
    ,
    { path: '*', redirect: '/' }, // catch all use case
  ],
})

Beachten Sie, dass Sie auch den Sammelpfad hinzufügen müssen.


Dies funktionierte bei mir im Gegensatz zu den anderen Antworten. Danke Adil!
Hugo S

10
window.router = new VueRouter({
   hashbang: false,
   //abstract: true,
  history: true,
    mode: 'html5',
  linkActiveClass: 'active',
  transitionOnLoad: true,
  root: '/'
});

und Server ist richtig konfiguriert In Apache sollten Sie die URL neu schreiben

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

8

Zitieren der Dokumente.

Der Standardmodus für den Vue-Router ist der Hash-Modus. Er verwendet den URL-Hash, um eine vollständige URL zu simulieren, damit die Seite nicht neu geladen wird, wenn sich die URL ändert.

Um den Hash loszuwerden, können wir den Verlaufsmodus des Routers verwenden, der die history.pushState-API nutzt, um eine URL-Navigation ohne erneutes Laden der Seite zu erreichen:

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

Im Verlaufsmodus sieht die URL "normal" aus, z. B. http://oursite.com/user/id . . Wunderschönen!

Hier tritt jedoch ein Problem auf: Da es sich bei unserer App um eine einseitige clientseitige App ohne ordnungsgemäße Serverkonfiguration handelt, wird den Benutzern beim Zugriff auf http://oursite.com/user/id ein 404-Fehler angezeigt angezeigt, direkt in ihrem Browser . Das ist hässlich.

Keine Sorge: Um das Problem zu beheben, müssen Sie Ihrem Server lediglich eine einfache Fallback-Route hinzufügen. Wenn die URL nicht mit statischen Assets übereinstimmt, sollte sie dieselbe index.html-Seite enthalten, auf der Ihre App lebt. Wieder schön!


2

Die vue-routerVerwendung hash-mode, in einfachen Worten, ist etwas, das Sie normalerweise von einem solchen Anker-Tag erwarten würden.

<a href="#some_section">link<a>

Damit der Hash verschwindet

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
  },
] // Routes Array
const router = new VueRouter({
  mode: 'history', // Add this line
  routes
})

Warning: Wenn Sie keinen ordnungsgemäß konfigurierten Server haben oder einen clientseitigen SPA-Benutzer verwenden, erhalten 404 Error Sie möglicherweise einen, wenn er versucht, https://website.com/posts/3direkt über seinen Browser darauf zuzugreifen . Vue Router Docs


0

Der Standardmodus für den Vue-Router ist der Hash-Modus. Er verwendet den URL-Hash, um eine vollständige URL zu simulieren, damit die Seite nicht neu geladen wird, wenn sich die URL ändert. Um den Hash loszuwerden, können wir den Verlaufsmodus des Routers verwenden, der die history.pushStateAPI nutzt , um eine URL-Navigation ohne erneutes Laden der Seite zu erreichen:

import {routes} from './routes'; //import the routes from routes.js    

const router = new VueRouter({
    routes,
    mode: "history",
});

new Vue({
    el: '#app',
    router,
    render: h => h(App)
});

route.js

import ComponentName from './ComponentName';

export const routes = [
   {
      path:'/your-path'
      component:ComponentName
   }
]

Referenz


2
Während dieser Code eine Lösung für die Frage bietet, ist es besser, einen Kontext hinzuzufügen, warum / wie er funktioniert. Dies kann zukünftigen Benutzern helfen, zu lernen und dieses Wissen auf ihren eigenen Code anzuwenden. Es ist auch wahrscheinlich, dass Sie positive Rückmeldungen von Benutzern in Form von Upvotes erhalten, wenn der Code erklärt wird.
Borchvm

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.