Eckige 2-Routing Funktioniert Nicht, Wenn Sie Eingesetzt werden, auf Http-Server
Werde ich die Entwicklung eines einfachen Winkel-2 Anwendung. Ich habe ein Projekt erstellt mit routing, mit Winkel-CLI und fügte hinzu, mehrere Komponenten, um die app mit 'ng erzeugen component" - Befehl. Dann habe ich angegeben das routing in der app-routing.- Modul.ts wie folgt.
import { NgModule } '@eckig/Kern'; import { Strecken, RouterModule } '@eckig/router'; import { HomeComponent } from './home/Startseite.die Komponente'; import { AboutComponent } from './über/about.die Komponente'; import { UserComponent } from './Benutzer/user.die Komponente'; import { ErrorComponent } from './Fehler/error.die Komponente'; import { SpecialpageComponent } from './specialpage/specialpage.die Komponente'; const Routen: Routen = [ { Pfad: ", Komponente: HomeComponent }, { Pfad: 'über', Komponente: AboutComponent }, { Pfad: 'user', Komponente: UserComponent }, { Pfad: 'specialpage', Komponente: SpecialpageComponent }, { Pfad: '**', Komponente: ErrorComponent } ]; @NgModule({ Importe: [RouterModule.forRoot(Routen)], Exporte: [RouterModule], Anbieter: [] }) export-Klasse AppRoutingModule { }
app.- Modul.ts ist wie folgt.
import { BrowserModule } '@Winkel - /Plattform-browser'; import { NgModule } '@eckig/Kern'; import { FormsModule } '@eckig/Formen'; import { HttpModule } '@eckig/http'; import { AppRoutingModule } from './app-routing.Modul'; import { AppComponent } from './app.die Komponente'; import { HomeComponent } from './home/Startseite.die Komponente'; import { AboutComponent } from './über/about.die Komponente'; import { ErrorComponent } from './Fehler/error.die Komponente'; import { UserComponent } from './Benutzer/user.die Komponente'; import { SpecialpageComponent } from './specialpage/specialpage.die Komponente'; @NgModule({ Erklärungen: [ AppComponent, HomeComponent, AboutComponent, ErrorComponent, UserComponent, SpecialpageComponent ], Importe: [ BrowserModule, FormsModule, HttpModule, AppRoutingModule ], Anbieter: [], bootstrap: [AppComponent] }) export class AppModule { }
Habe ich noch keine änderungen für die anderen Komponenten.
Dann verwendete ich die Anwendung mit 'ng dienen" - Befehl, und die app funktioniert mit den links.
Eg: http://localhost:4200/about
Aber wenn ich das Projekt bereitstellen, die in http-server, die links funktionieren nicht wie erwartet. Ich implementierte die app mit 'http-server ./dist " - Befehl, und die app wird bereitgestellt in Ordnung, aber die links funktionieren nicht. Wenn ich gehe zu 'http://localhost:4200/about', gibt es 404-Fehler.
Mache ich etwas falsch? Warum 'ng-serve' funktioniert und 'http-server' funktioniert nicht?
Jede Hilfe würde geschätzt werden. Vielen Dank im Voraus.
Hochgeladen habe ich mein Projekt auf github.
imports: [RouterModule.forRoot(routes, {useHash: true})],
. Wenn es so funktioniert, müssen Sie enable HTML5 pushState auf Ihrem Produktionsserver.Ich habe versucht, aber kein Glück
Versuchen Sie auch das hinzufügen
pathMatch: 'full'
dieser route path: '',
vielen Dank für Ihre wertvolle Informationen zu diesem Thema. Ich werde versuchen, eine Lösung zu finden. Nochmals vielen Dank
Hast du die Lösung. ich habe das gleiche Problem.
InformationsquelleAutor kinath_ru | 2017-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses problem wird gelöst durch die Umsetzung
HashLocationStrategy
fügt#
alle Ihre Routen. Sie erreichen dies durch hinzufügenHashLocationStrategy to AppModule providers
.und fügen Sie den entsprechenden import -
Dieser wird Ihr problem lösen.
Und wenn Sie nicht wollen, verwenden Sie die
HashLocationStrategy
verwenden, können Sie diePahtLocationStrategy
, und so Ihre Eckige app wird nicht angezeigt-Hash in der URL.Für weitere Informationen zu überprüfen, die offizielle Link: https://angular.io/api/common/PathLocationStrategy
Danke!!! hat mir geholfen. Aber ist es ok, immer zeigen Sie ein hashtag in den bereitgestellten Webseiten-urls? Hmm
Ich Aktualisiert meine Antwort, wenn Sie nicht wollen, um zu zeigen
Hashtag
in URLsIch glaube, das sollte nicht sein Ding. Beheben von Google. Ändern Sie das Konstrukt, das gesamte internet zu beschwichtigen mich.
Diese. Ich habe versucht, alle Arten von Dingen zu bekommen, und es laufen sowohl auf meinem nginx und IIS - ohne Erfolg. Bis stieß ich auf diese ein. Würde nicht, wir wollen alle Winkel zu verwenden, die HashLocationStrategy standardmäßig? Oder, noch weiter Weg, sollte es nicht einmal eine option, es NICHT zu benutzen?
InformationsquelleAutor Manu
Dies ist, weil der http-server unterstützt nicht fallback wie lite-server oder web-pack-dev-server. Dies ist, warum es zeigt 404 nicht gefunden.
Es gibt 2 Lösung zwei Lösungen um dieses Problem zu beheben:
Hinweis: Für die Entwicklung, die Sie verwenden können, lite-server.
Hoffe, dies wird Ihnen helfen.
InformationsquelleAutor Ashish Sharma
Wird es passieren, denn es geht um eine Seite zu finden, über die gibt es nicht im Innern an alle also 404. Mögliche Optionen:
Wenn Sie wollen gehen Sie mit http-server, dann verwenden Sie einen proxy, der leitet alles, was zu http://localhost:your-port.
Option:
-P
oder--proxy
Proxies alle Anfragen, die nicht lokal aufgelöst werden, um die angegebene url. z.B.:-P http://someurl.com
Nicht verwenden express überhaupt. Erstellen Sie Ihre eigenen http-server mit express & Redirect alles auf index.html
Vorausgesetzt öffentlichkeit ist dein Ordner, in dem u halten Sie alle transpiled Dinge.
InformationsquelleAutor Parth Ghiya
Wird es gelöst:
Fall-1: Für die version kleiner als Eckige 5.1
1) Verwenden Sie HashLocationStrategy wie unten erwähnt:
In AppModule tun die folgende.
1.1)
import { HashLocationStrategy, LocationStrategy } from '@angular/common';
1.2)
providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}]
Fall-2: Für die version gleich oder mehr als Eckige 5.1
2.1) Winkel eingeführt hat diese Eigenschaft onSameUrlNavigation für die überwindung refresh-Problem auf dem server.
2.2) Hinzufügen onSameUrlNavigation der
RouterModule.forRoot
im Importe array .a) Anwendung Haupt-routing-Modul, i,e, app.routing.- Modul.ts /app.routing.ts hinzufügen der Eigenschaft
Siehe unten:
Hoffe, es hilft jemandem.
InformationsquelleAutor ArunDhwaj IIITH
Ich habe dieses problem gelöst, mit dem hinzufügen, diese in AppModule Anbieter:
importieren und
Dann habe ich angelegt .htaccess:
Klappt alles Super ohne # in URLs 🙂
InformationsquelleAutor Maciej Socha
Wenn Sie, wie ich, wollen keine code-änderungen, verwenden Sie einfach diese statt:
https://www.npmjs.com/package/angular-http-server
InformationsquelleAutor Sharpiro
Für Apache-server:
in der Produktion von Servern
Hinzufügen oder erstellen ".htaccess" - Datei in das Projekt-root, fügen Sie eine rewrite-Regel, um die .htaccess-Datei, wie gezeigt,
InformationsquelleAutor Tanvir Sarker
Für Apache-Server
.htaccess
index.html
stattindex.php
Für diejenigen, die haben keinen code schreiben können, der den code unten in Ihre
.htaccess
- Datei :RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
Dieser code funktioniert möglicherweise nicht für die SSL-Zertifikat - Kontaktieren Sie Ihren hosting-provider ODER besuchen Sie https://httpd.apache.org/docs/current/howto/htaccess.html , siehe docs.
InformationsquelleAutor Smit Patel
Gemäß der Dokumentation auf https://angular.io/guide/deployment (Apache, Sie könnte auch für nginx)
Sie müssen den server index.html mit Hilfe der .htaccess-Datei als
RewriteRule ^ /index.html
InformationsquelleAutor Shiva Sheshendra
Sollten Sie versuchen, die Angabe der url in der build von dem Punkt aus, sollte die app initialisieren:
InformationsquelleAutor bardat
Blick auf den Inhalt von blockquote.
Und dann gibst du den Namen "HttpModule" bei
providers:[]
im app.- Modul.tsDank.
InformationsquelleAutor C.Petrescu
Können Sie tun es, während Anmeldung Ihr RouterModule.forRoot, können Sie ein zweites Objekt mit der Eigenschaft {useHash: true} wie die unten :
Ich habe das gleiche problem. ng dienen, funktioniert gut, aber wenn ich bereitstellen zu meinem local, localhost/ doesnot Arbeit
vergessen Sie nicht, verwenden Sie den hash in der url, wenn Sie es testen, wie: 127.0.0.1/#/home
InformationsquelleAutor abahet
Ändern Sie Ihre index.html
Weil wir mit Tomcat haben wir erwähnt, dass dieses(.)
für das Routing basiert auf dieser (/), So gleichen wie http-server
Ich meine normal läuft ng dienen Sie gesehen haben, nur
http://localhost:4200/
aber laufen im server, den Sie gesetzt haben, Ihren build-in(dist) in webapps
also seinen kommen wie
so müssen Sie
<base href="./">
ich denke, das ist das problem für Sie gelöst werden können.
InformationsquelleAutor Karnan Muthukumar
in den Projekt-Ordner zu erstellen .htaccess-Datei und dann schreiben
Folgen Sie diesem link:
https://angular.io/guide/deployment
InformationsquelleAutor Amr AbdelRahman