Reagieren-router-urls funktionieren nicht, wenn das aktualisieren oder manuell schreiben
Ich bin mit Reagieren-router und es funktioniert gut, während ich Klick auf link-Tasten, aber wenn ich aktualisieren meiner Webseite nicht laden, was ich will.
Zum Beispiel, ich bin in localhost/joblist
und alles ist in Ordnung, da kam ich hier an, drücken auf einen link. Aber Wenn ich aktualisieren die Webseite, die ich bekomme:
Cannot GET /joblist
Standardmäßig, es hat nicht funktioniert wie dieses. Zunächst hatte ich meine URL als localhost/#/
und localhost/#/joblist
und Sie funktionierte perfekt in Ordnung. Aber ich weiß nicht, wie diese Art von URL, so versuchen Sie zu löschen, dass #
ich schrieb:
Router.run(routes, Router.HistoryLocation, function (Handler) {
React.render(<Handler/>, document.body);
});
Tritt das problem nicht auf mit localhost/
, dieser gibt immer was ich will.
EDIT: Diese app ist single-Seite, so /joblist
braucht nicht zu Fragen, nichts zu einem beliebigen server.
EDIT2: Meinen ganzen router.
var routes = (
<Route name="app" path="/" handler={App}>
<Route name="joblist" path="/joblist" handler={JobList}/>
<DefaultRoute handler={Dashboard}/>
<NotFoundRoute handler={NotFound}/>
</Route>
);
Router.run(routes, Router.HistoryLocation, function (Handler) {
React.render(<Handler/>, document.body);
});
- es sei denn, Sie verwenden htaccess-laden Sie Ihren Haupt-touring-Seite und erzählen Sie Ihren router-Standort.pathname es nicht funktionieren..
- Wie hast du das löschen, die
#
symbol? Danke!!! - Kannst du bitte zeigen wie du das Problem gelöst mit router anzeigen?
- Ja, bitte, zeigen, wie Sie das Problem gelöst? Ich bekomme nicht die Antwort.
- Wenn Sie das hosting Ihrer app reagieren in einem S3-bucket, können Sie einfach legen Sie die error-Dokument zu
index.html
. Dies wird sicherstellen, dassindex.html
ist der hit, egal was. - In meinem Fall, es funktioniert in windows aber nicht unter linux
- Dies ist die Referenz, die geholfen haben mein problem zu lösen: github.com/facebook/create-react-app/blob/master/packages/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die Kommentare auf die akzeptierte Antwort, und der generische Charakter dieser Frage ("don'T work"), dachte ich, es wäre ein guter Ort für einige Allgemeine Erläuterungen über die Themen, die hier beteiligt sind. Also diese Antwort ist gedacht als hintergrund-info /Ausarbeitung, auf den konkreten Anwendungsfall der OP. Bitte Geduld mit mir.
Serverseitige vs. clientseitige
Den ersten großen Sache zu verstehen ist, dass es jetzt 2 Orte, wo die URL interpretiert wird, in der Erwägung, dass es verwendet werden, um nur 1 in 'alten Tagen'. In der Vergangenheit, als das Leben noch einfach war, einige user schickte eine Anfrage für
http://example.com/about
an den server, der überprüft den Pfad-Teil der URL, bestimmt der Benutzer anfordert, die über die Seite und dann wieder zurück geschickt, die Seite.Client-routing, was ist das, was Reagieren-Router bietet, sind die Dinge weniger einfach. Auf den ersten, der Kunde keinen JS code geladen noch. Wenn also der erste Antrag wird immer an den server. Das wird dann wieder eine Seite, die enthält Skript-tags auf Last Reagieren und Reagieren, Router etc. Nur wenn diese Skripte geladen haben, hat die phase 2 starten. In phase 2, wenn der Benutzer klickt auf den "Über uns" - Navigations-link zum Beispiel, die URL ist geändert nur lokal zu
http://example.com/about
(möglich gemacht durch die History API), aber keine Anfrage an den server gemacht wird. Stattdessen Reagieren Router macht seine Sache auf der client-Seite, bestimmt, die Reagieren view zu Rendern und es rendert. Vorausgesetzt, dass Ihr über die Seite nicht brauchen, um alle REST-Aufrufe, es ist bereits getan. Sie haben umgestellt, von zu Hause aus Über Uns ohne server-Anfrage mit ausgelöst.Also im Grunde, wenn Sie auf einen link klicken, Javascript läuft, ändert sich die URL in der Adressleiste, ohne dass eine Aktualisierung der Seite, was wiederum dazu führt, Reagieren die Router zum durchführen einer Seite übergang auf der client-Seite.
Aber jetzt überlegen, was passiert, wenn man copy-paste die URL in die Leiste Adresse und e-mail es zu einem Freund. Dein Freund hat nicht geladen wird Ihre website noch. In anderen Worten, Sie ist immer noch in phase 1. Nicht Reagieren-Router ist auf Ihrem Rechner noch nicht. Also Ihr browser eine server-Anfrage zu
http://example.com/about
.Und das ist, wo dein Problem beginnt. Bis jetzt, Sie bekommen konnte Weg mit nur platzieren einer statischen HTML-Code auf den webroot des Servers. Aber das hätte
404
Fehler für alle anderen URLs , wenn vom server angefordert. Die gleichen URLs funktionieren auf der client-Seite, weil es Router Reagieren, tun Sie das routing für Sie, aber Sie scheitern auf der server-Seite, es sei denn, Sie stellen Ihren server zu verstehen.Die Kombination von server - und client-routing
Wenn Sie möchten, dass die
http://example.com/about
URL zu arbeiten, sowohl auf der server - und der client-Seite müssen Sie die Routen, für die es sowohl auf der server - und der client-Seite. Macht Sinn, oder?Und dies ist, wo Ihre Möglichkeiten beginnen. Lösungen reichen von der Umgehung des Problems insgesamt, über eine catch-all-route, gibt die bootstrap-HTML, um die full-on isomorph Ansatz, bei dem sowohl der server als auch der client den gleichen JS-code.
.
Umgehen das problem insgesamt: Hash-Geschichte
Mit Hash-Geschichte statt Browser-Geschichte, Ihre URL für die über-Seite würde wie folgt Aussehen:
http://example.com/#/about
Der Teil nach der Raute (
#
) symbol ist nicht an den server gesendet. Also der server sieht nurhttp://example.com/
und sendet die index-Seite als erwartet. Reagieren-Router holt das#/about
Teil und zeigen Sie die richtige Seite.Nachteile:
.
Catch-all
Mit diesem Ansatz, die Sie tun, verwenden Sie die Browser-Historie, aber gerade das einrichten einer catch-all auf dem server, sendet
/*
zuindex.html
, so dass Sie viel die gleiche situation wie bei den Hash-Geschichte. Sie haben saubere URLs jedoch und Sie könnten Verbesserung die auf diesem Schema, später die zimmerreserviereung, ohne das Sie ungültig werden alle Ihre Benutzer Favoriten.Nachteile:
.
Hybrid
In der hybrid-Ansatz, erweitern Sie auf die catch-all-Szenario durch das hinzufügen von speziellen Skripten für bestimmte Routen. Sie könnten, machen einige einfache PHP-Skripte zurück, die wichtigsten Seiten Ihrer Website mit content enthalten, also Googlebot kann zumindest sehen, was auf Ihrer Seite.
Nachteile:
.
Isomorph
Was passiert, wenn wir verwenden, Node JS, wie unsere server, damit wir laufen können die gleichen JS-code an beiden enden? Nun, wir haben alle unsere Routen definiert, die in einer einzigen Reaktion-router config, und wir brauchen nicht zu duplizieren unsere rendering-code. Dies ist die 'der Heilige Gral', so zu sprechen. Der server schickt die exakt gleichen markup wie wir enden würden, wenn die Seite den übergang passiert hatte, auf dem client. Diese Lösung ist optimal in Bezug auf SEO.
Nachteile:
window
auf server-Seite etc).
Welches sollte ich nutzen?
Wählen Sie die, die Sie bekommen können Weg mit. Ich persönlich denke, die catch-all ist einfach zu set-up, also das wäre mein minimum. Dieses setup ermöglicht es Ihnen, zu verbessern, auf die Dinge im Laufe der Zeit. Wenn Sie schon mit Node JS als server-Plattform, würde ich auf jeden Fall untersuchen, macht ein isomorph, app. Ja, es ist hart, auf den ersten, aber sobald man den Dreh raus, es ist tatsächlich eine sehr elegante Lösung für das problem.
Also im Grunde, für mich, das wäre der entscheidende Faktor. Wenn mein server läuft auf Node JS, ich würde gehen isomorph; sonst würde ich gehen für die Catch-all Lösung und einfach ausbauen (Hybrid-Lösung) mit fortschreitender Zeit-und SEO-Anforderungen es verlangen.
Wenn Sie möchten, um mehr darüber zu erfahren isomorph (auch genannt "universal") rendering mit Reagieren, gibt es einige gute tutorials zu dem Thema:
Auch, um Ihnen den Einstieg empfehle ich einen Blick auf einige starter-kits. Wählen Sie eine, die passt zu deinen Entscheidungen, die für den Technologie-stack (denken Sie daran, zu Reagieren ist einfach das V in MVC, müssen Sie mehr Dinge zu bauen, die eine volle app). Beginnen Sie mit der Suche auf der one veröffentlicht, die von Facebook selbst:
Oder wählen Sie eine der vielen von der community. Es gibt eine nette Seite, nun, das versucht, die index alle:
Ich begann mit diesen:
Derzeit bin ich mit einem home-brew-version von universal-rendering, die inspiriert wurde von den beiden starter-kits oben, aber Sie sind jetzt veraltet.
Viel Glück bei deiner Suche!
/*
und machen es Antworten Sie mit Ihrer HTML-Seite. Das schlimme hier ist, um sicherzustellen, dass Sie nicht abfangen, Anforderungen für die .js-und .css-Dateien mit dieser route.app.use('*', function(req, res, next) {res.send('<DOCTYPE html ....')});
createMemoryHistory is not a function
Fehler. Geist einen Blick? stackoverflow.com/questions/45002573/...Die Antworten hier sind alle sehr hilfsbereit, was für mich gearbeitet wurde die Konfiguration meiner Webpack-server zu erwarten, dass die Routen.
Den historyApiFallback ist, was das Problem behoben für mich. Jetzt ist das routing korrekt funktioniert und ich kann aktualisieren Sie die Seite oder geben die URL direkt ein. Keine Notwendigkeit, sorgen über Problemumgehungen Arbeit auf den Knoten server. Diese Antwort offensichtlich funktioniert nur, wenn Sie mit webpack.
EDIT: siehe meine Antwort hier für eine detailliertere Grund, warum dies notwendig ist:
https://stackoverflow.com/a/37622953/5217568
historyApiFallback
ist ausreichend. Für alle anderen Optionen, es kann auch eingestellt werden von CLI mit der Flagge--history-api-fallback
.Für Reagieren Router V4 Benutzer:
Wenn Sie versuchen, dieses problem zu lösen, indem die Hash-Geschichte-Technik erwähnt in anderen Antworten, beachten Sie, dass
<Router history={hashHistory} >
funktioniert nicht in V4, nutzen Sie bitte
HashRouter
statt:Referenz:
https://reacttraining.com/react-router/web/api/HashRouter
Können Sie Ihre htaccess und fügen Sie diese:
Ich bin mit
react: "^15.3.2"
,react-router: "^3.0.0"
,history: "^4.3.0"
,Den router aufgerufen werden kann auf zwei verschiedene weisen, je nachdem ob die navigation erfolgt auf dem client oder auf dem server. Sie haben es konfiguriert für client-side-Betrieb. Der key-parameter ist der zweite zu dem run-Methode, die Lage.
Wenn Sie die Router Reagieren Link-Komponente, es blockiert die browser-navigation und Anrufe transitionTo zu tun, eine client-side navigation. Sie sind mit HistoryLocation, so nutzt das HTML5-history-API zu vervollständigen die illusion der navigation durch die Simulation der neuen URL in der Adressleiste. Wenn Sie mit älteren Browsern funktioniert es nicht. Du brauchst die HashLocation Komponente.
Wenn Sie auf aktualisieren Sie alle umgehen, Reagieren und Reagieren-Router-code. Der server bekommt die Anfrage für
/joblist
und es muss etwas zurückgeben. Auf dem server muss man den Pfad, der angefordert wurde, um dierun
Methode, um für Sie zu machen die richtige Ansicht. Sie können den gleichen Weg anzeigen, aber Sie werden wahrscheinlich brauchen einen anderen Anruf zuRouter.run
. Als Charles Punkte aus, die Sie verwenden können, URL-rewriting, dies zu behandeln. Eine weitere option ist die Verwendung einer node.js server, der alle Anforderungen verarbeitet und pass den Pfad Wert als Standort-argument.In express, zum Beispiel, könnte es wie folgt Aussehen:
Beachten Sie, dass der Pfad der Anforderung übergeben wird, um
run
. Um dies zu tun, müssen Sie eine server-side-Ansicht-engine, die Sie übergeben können, das gerenderte HTML um. Es gibt eine Reihe von anderen überlegungen überrenderToString
und in Betrieb Reagieren auf den server. Sobald die Seite auf dem server gerendert wird, wenn die app Lasten des Kunden, es wird Rendern Sie erneut, die Aktualisierung der server-Seite HTML gerendert, wie gebraucht.In Ihrem index.html
head
Folgendes hinzu:Dann, wenn mit webpack dev-server verwenden Sie diesen Befehl.
--history-api-fallback
ist der wichtige Teil/
dannHashRouter
wird nicht funktionieren (wenn Sie die hash-routing)Dem Webpack Dev-Server hat eine option um dies zu ermöglichen. Öffnen
package.json
und fügen Sie--history-api-fallback
.Diese Lösung funktionierte für mich.
https://github.com/reactjs/react-router-tutorial/tree/master/lessons/10-clean-urls#configuring-your-server
webpack-dev-server
aber wie behebe ich dieses Problem für die Produktion bauen?Ich verwendet erstellen-reagieren-app um eine website zu machen gerade jetzt, und hatte das gleiche Problem hier vorgestellt. Ich benutze
BrowserRouting
von derreact-router-dom
Paket. Ich bin auf einem Nginx server und was löste es, für mich war das hinzufügen folgender/etc/nginx/yourconfig.conf
Entspricht, um das hinzufügen der folgenden
.htaccess
falls Sie AppacheDies scheint auch die Lösung von Facebook selbst und finden hier
Dies kann Ihr problem lösen
Ich auch vor dem gleichen problem, in ReactJS Anwendung im Produktions-Modus.
Hier ist die 2 die Lösung für das problem.
1.Ändern Sie die routing-Geschichte zu "hashHistory" statt browserHistory in den Ort der
Bauen jetzt die app mit dem Befehl
Dann den build-Ordner in dein Verzeichnis/var /www/Ordner, Jetzt ist die Anwendung ist in Ordnung, die mit der Ergänzung der # tag in jeder url. wie
localhost/#/home
localhost/#/aboutus
Lösung 2 : Ohne # - tag mit browserHistory,
Setzen Sie Ihre Geschichte = {browserHistory} in deinem Router,Jetzt bauen es mit Hilfe von sudo npm führen Sie build.
Benötigen Sie die "conf" Datei zu lösen, die 404 not found Seite
die conf-Datei sollte wie folgt sein.
öffnen Sie Ihre terminal-Typ der weiter unten genannten Befehle
cd /etc/apache2/sites-available
ls
nano-Beispiel.conf
Fügen Sie den unten in diesem content.
Nun müssen Sie zum aktivieren der Probe.conf-Datei mithilfe des folgenden Befehls
dann wird es Sie bitten, laden Sie den apache-server,mit
sudo service apache2 reload oder restart
dann öffnen Sie Ihre localhost/build-Ordner und fügen Sie die .htaccess Datei mit dem Inhalt unten.
Nun die app funktioniert wie gewohnt.
Hinweis: ändern 0.0.0.0 ip an Ihre lokale ip-Adresse.
Wenn irgendwelche Zweifel bezüglich dieser fühlen Sie sich frei, um ein Kommentar.
Ich hoffe, es ist hilfreich für andere.
Wenn Sie hosting eine reagieren-app über Statische AWS S3-Hosting & CloudFront
Dieses problem stellte sich von CloudFront reagiert mit einem 403-Zugriff Verweigert-Meldung, weil Sie erwartet /ein/anderer/Pfad gibt es in meinem S3-Ordner, aber dieser Pfad existiert nur intern im Reagieren ist das routing mit reagieren-router.
War die Lösung, um eine Verteilung Fehler-Seiten-Regel. Gehen Sie auf die CloudFront-Einstellungen " und wählen Sie Ihre distribution. Anschließend gehen Sie auf die "Fehler-Seiten" - Registerkarte. Klicken Sie auf "Erstellen von Benutzerdefinierten Fehler-Antwort" und fügen Sie einen Eintrag für 403 da, das ist der Fehler-status-code, den wir bekommen. Die Antwort-Seite den Pfad auf /index.html und den status code 200. Das Ergebnis überrascht mich mit seiner Einfachheit. Die index-Seite wird serviert, aber die URL ist erhalten in den browser, so dass, sobald die reagieren, die app lädt, erkennt es den URL-Pfad und navigieren Sie zu der gewünschten route.
Fehlerseiten 403-Regel
Herstellung stack: Reagieren, Reagieren Router v4, BrowswerRouter, Express, Nginx
1) Benutzer BrowserRouter für pretty urls
2) Hinzufügen index.html um alle unbekannten Anfragen mithilfe
/*
3) bundle webpack mit
webpack -p
4) laufen
nodemon server.js
odernode server.js
EDIT: Sie möchten, dass nginx verarbeiten diese in den server blockieren und ignorieren Sie Schritt 2:
import path from 'path
oderconst path = require('path')
/*
) hat gerade meinen Tag gerettet. Danke!!! 🙂hinzufügen webpack.congif.js
Versuchen hinzufügen ".htaccess" - Datei in den öffentlichen Ordner mit dem code unten.
, Wenn Sie verwenden, Erstellen Sie Reagieren, App:
Gibt es eine große Wanderung, obwohl dieses Problem mit Lösungen für viele große hosting-Plattformen, die Sie finden können HIER auf das Erstellen Reagieren App-Seite. Verwende ich zum Beispiel Reagieren, Router v4 und Netlify für meine frontend-code. Alle dauerte es wurde Zugabe 1 Datei auf meinen öffentlichen Ordner ("_redirects") und eine Zeile code in die Datei:
Nun meine website richtig darstellt Pfade wie mysite.com/pricing wenn in den browser eingegeben oder, wenn jemand hat etwas aktualisieren.
Dieses Thema ist ein bisschen alt, und gelöst, aber ich möchte vorschlagen, eine einfach, klare und bessere Lösung. Es funktioniert, wenn Sie web server.
Jeder web-server hat eine Möglichkeit zum umleiten der Benutzer auf eine Fehlerseite im Falle von http 404. Um dieses Problem zu lösen, müssen Sie umleiten Benutzer auf der index-Seite.
Wenn Sie Java-base-server (tomcat oder java application server) die Lösung könnte die folgende sein:
web.xml:
Beispiel:
Ist, dass es keine Zauber mehr braucht:)
const browserHistory = useRouterHistory(createHistory)({ basename: '/<appname>' });
Wenn Sie das hosting Ihrer app reagieren auf IIS, fügen Sie einfach eine web.config-Datei mit :
Dies sagen IIS-server für die Rückgabe der main-Seite auf dem client anstatt der 404-Fehler und keine Notwendigkeit zu verwenden hash-Geschichte.
Wenn Sie einen fallback auf Ihre index.html stellen Sie sicher, dass in Ihrem index.html -Datei Sie haben diese:
Das kann sich von Projekt zu Projekt.
head
: <base href="/">Ich bin nicht mit server-side-rendering noch nicht, aber ich traf das gleiche problem wie der OP, wo Link schien zu funktionieren, aber die meiste Zeit konnte, wenn ich einen parameter hatte. Ich werde dokumentieren, meine Lösung hier zu sehen, ob es hilft jemand.
Mein main jsx enthält:
Dies funktioniert gut für die ersten passenden link, aber wenn die : - id-änderungen in
<Link>
Ausdrücke verschachtelt auf, das Modell ist detail-Seite, die url-änderungen in der browser-Leiste, jedoch ist der Inhalt der Seite zunächst nicht, ändert sich die verlinkte Modell.Das Problem war, dass ich verwendet hatte, die
props.params.id
zu setzen das Modell incomponentDidMount
. Die Komponente ist nur einmal befestigt, so bedeutet dies, dass das erste Modell ist das einer, der klebt auf der Seite und den nachfolgenden Links ändern, die Requisiten, aber die Seite verlassen, auf der Suche unverändert.Einstellung des Modells, die in der Komponente state in beiden
componentDidMount
und incomponentWillReceiveProps
(wo ist es auf der Basis des nächsten Requisiten) löst das problem und den Inhalt der Seite ändert sich entsprechend, um das gewünschte Modell.props
) ich.s.o.componentDidMount
wenn Sie jemals wollen, um zu versuchen, für server-side-rendering. DacomponentDidMount
wird nur aufgerufen, im browser. Ihr Zweck ist, um Dinge zu tun, mit dem DOM, wie das anbringen von Ereignis-Listenernbody
etc, dass Sie nicht mehr inrender
.Wenn Sie mit FB alle Sie tun müssen ist, stellen Sie sicher, Sie haben eine schreibt-Eigenschaft in Ihre Feuerstellung.json-Datei in das Stammverzeichnis Ihrer app (im hosting-Bereich).
Beispiel:
Hoffe, das spart jemand anderes ein Hort der frustration und verschwendet Zeit.
Happy coding...
Weiterführende Literatur zum Thema:
https://firebase.google.com/docs/hosting/full-config#rewrites
FB CLI: "Konfigurieren Sie wie eine single-page-app (schreiben alle urls /index.html)"
Fand ich die Lösung für mein SPA mit reagieren router (Apache). Fügen Sie einfach in .htaccess
Quelle: https://gist.github.com/alexsasharegan/173878f9d67055bfef63449fa7136042
Wenn Sie in IIS gehostet wird ; das Hinzufügen dieser zu meinem webconfig mein problem gelöst
Können Sie ähnliche Konfiguration für andere server
Im Fall, jemand ist hier auf der Suche nach Lösung auf React JS SPA mit Laravel.
Die akzeptierte Antwort ist die beste Erklärung, warum diese Probleme passieren. Wie bereits erläutert, müssen Sie konfigurieren die client-Seite und server-Seite.
In Ihrer blade-Vorlage, gehören die js-Datei gebündelt, stellen Sie sicher, dass Sie
URL facade
wie dieseIhre Routen, stellen Sie sicher, fügen Sie diese zu den wichtigsten Endpunkt, an dem die Klinge Vorlage ist. Zum Beispiel,
Das obige ist der wichtigste Endpunkt für die blade-template. Nun fügen Sie eine optionale route,
Das problem, dass passiert ist, dass zuerst der blade template geladen wird, dann reagieren die router. Also, wenn Sie laden
'/setting-alerts'
es lädt die html-und js. Aber wenn Sie laden'/setting-alerts/about'
, lädt er zuerst auf der server-Seite. Da auf der server-Seite, es gibt nichts auf dieser Position, es gibt nicht gefunden. Wenn Sie das optionale router, lädt dieselbe Seite zu reagieren und router ist auch geladen, dann reagieren loader entscheidet darüber, welche Komponente zu zeigen.Hoffe, das hilft.
/user/{userID}
ich nur zurückgeben müssen, eine Universelle/user
HTML-Ansicht, bringen Sie die ID und rufen Sie es mit AJAX oder axios. Ist es möglich das zu tun? sind Sie SEO-freundlich?Wenn Sie Express oder irgendeinem anderen framework im backend , können Sie hinzufügen, die eine ähnliche Konfiguration wie unten und überprüfen Sie die Webpack public-Pfad in der Konfiguration, es sollte funktionieren, auch auf neu laden, wenn Sie mit BrowserRouter
So, ich bin mit .Net-Core-MVC-so etwas hat mir geholfen:
Grundsätzlich in der MVC-Seite alle Routen, die nicht zusammenpassen, der wird fallen in
Home/Index
wie es angegeben ist instartup.cs
. InnerhalbIndex
es ist möglich, um die ursprüngliche Anforderungs-url und übergeben Sie es, wo immer nötig.Ich hatte das gleiche problem und diese Lösung für uns gearbeitet..
Hintergrund:
Sind wir hosten mehrerer Anwendungen auf dem gleichen server. Wenn wir aktualisieren die server würden nicht verstehen, wo sehen Sie unsere index in den dist-Ordner für die jeweilige app. Der obige link führt Sie zu dem, was für uns gearbeitet... Hoffe, das hilft, wie wir haben, verbrachte Stunden auf, herauszufinden, eine Lösung für unsere Bedürfnisse.
Benutzen wir:
meine webpack.config.js
meine index.js
meine app.js
Lösung für Preact mit preact-router
Funktioniert mit aktualisieren und einen direkten Zugang
Für jene zu entdecken, diese über Google, hier ist eine demo von preact-router + hash-Geschichte:
https://jsfiddle.net/developit/gLyL6rbn/
Für diejenigen, die mit IIS-10, das ist, was Sie tun sollten, um dieses Recht. Werden Sie sicher, dass Sie browserHistory mit diesem. Als Referenz gebe ich den code für das routing, aber das ist nicht das, was zählt, was zählt, ist der nächste Schritt, nachdem die Komponente folgenden code:
Da das problem ist IIS empfängt die Anfrage vom client-Browser interpretiert wird die URL als wenn es fragt nach einer Seite, und gibt dann eine 404-Seite, da es keine verfügbare Seite. Das folgende tun:
Und es funktioniert jetzt einwandfrei.
Ich hoffe, es hilft. 🙂
Ich mag diese Art der Behandlung. Versuchen Sie, hinzufügen:
yourSPAPageRoute/* auf der server-Seite, um loszuwerden, dieses problem.
Ich ging mit diesem Vorgehen, denn auch die native HTML5-History-API nicht unterstützt korrekte Umleitung auf Seite aktualisieren (soweit ich weiß).
Hinweis: die Ausgewählte Antwort bereits angesprochen, aber ich werde versuchen, genauer zu sein.
Express-Route
Getestet und wollte nur zu teilen dieses.
Hoffe, es hilft.
Fixierung des "nicht BEKOMMEN kann /URL" - Fehler auf "aktualisieren" oder über den Aufruf der URL direkt.
Konfigurieren Sie Ihre webpack.config.js zu erwarten, dass die gegebenen link Strecken wie dieser.
Bin ich mit dem WebPack, ich hatte dasselbe problem, Lösung=>
In Ihrem server.js Datei
https://github.com/ReactTraining/react-router/blob/master/FAQ.md#why-doesnt-my-application-render-after-refreshing
Hinzufügen weitere Informationen zu Joshua Dyck ' s Antwort.
Wenn Sie FB nutzen möchten und sowohl die Wurzel Weg und ein sub-directory-route, die Sie müssen, fügen Sie den folgenden code in Ihre
firebase.json
:Beispiel:
Bauen Sie eine website für einen Kunden. Sie möchten, dass der Besitzer der website, um Informationen hinzuzufügen, die in https://your.domain.com/management, während die Benutzer der website navigieren Sie zu https://your.domain.com.
In diesem Fall Ihre
firebase.json
Datei wird wie folgt Aussehen:Seine ziemlich einfach, wenn du nicht Holen 403 Fehler nach dem aktualisieren von dom-Komponente. fügen Sie einfach diese eine Zeile in Ihrem web-pack config, 'historyApiFallback: true". diese savez mir den ganzen Tag.
Komplette Router mit Beispiel (Reagieren Router v4):
Beispiel funktioniert Beispielsweise Überprüfen Sie heraus das Projekt weiter unten.
https://github.com/eh3rrera/react-router-4-example
Nach dem download
1.) "npm install" im cmd zum installieren von project
2.) "npm Start" starten Sie Ihre app reagieren
Hinweis : Sie müssen den Node-js software zu laufen im windows. Mac OS Knoten Standard.
Cheers