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

DokiCRO
quelle

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

Bill Criswell
quelle
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'
})
Israel Morales
quelle
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".

Tadas Stasiulionis
quelle
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.

Adil H. Raza
quelle
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>
vivek
quelle
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!

Der Beobachter
quelle
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

Ritankar Paul
quelle
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

Rijosh
quelle
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