Ich habe das AngularJS-Seed-Projekt und habe hinzugefügt
$locationProvider.html5Mode(true).hashPrefix('!');
in die Datei app.js. Ich möchte IIS 7 so konfigurieren, dass alle Anforderungen an weitergeleitet werden
http://localhost/app/index.html
damit das bei mir funktioniert. Wie mache ich das?
Aktualisieren:
Ich habe gerade das IIS URL Rewrite-Modul entdeckt, heruntergeladen und installiert , in der Hoffnung, dass dies das Erreichen meines Ziels einfach und offensichtlich macht.
Update 2 :
Ich denke, dies fasst zusammen, was ich erreichen möchte (entnommen aus der AngularJS Developer-Dokumentation ):
Wenn Sie diesen Modus verwenden, müssen Sie die URL auf der Serverseite neu schreiben. Grundsätzlich müssen Sie alle Links zum Einstiegspunkt Ihrer Anwendung (z. B. index.html) neu schreiben.
Update 3:
Ich arbeite immer noch daran und mir ist klar, dass ich bestimmte URLs wie z. B. NICHT umleiten muss (Regeln haben, die neu schreiben)
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html
Daher wird alles, was sich in den Verzeichnissen css, js, lib oder partials befindet, nicht umgeleitet. Alles andere muss nach app / index.html umgeleitet werden
Weiß jemand, wie man dies einfach erreicht, ohne für jede einzelne Datei eine Regel hinzufügen zu müssen?
Update 4:
Ich habe 2 eingehende Regeln im IIS URL Rewrite-Modul definiert. Die erste Regel lautet:
Die zweite Regel lautet:
Wenn ich jetzt zu localhost / app / view1 navigiere, wird die Seite geladen, aber die unterstützenden Dateien (die in den Verzeichnissen css, js, lib und partials) werden auch in die Seite app / index.html umgeschrieben - also kommt alles zurück als index.html Seite, egal welche URL verwendet wird. Ich denke, dies bedeutet, dass meine erste Regel, die verhindern soll, dass diese URLs von der zweiten Regel verarbeitet werden, nicht funktioniert. Irgendwelche Ideen? ...jemand? ... ich fühle mich so alleine ... :-(
quelle
app/index.html
und nichtapp/
explizit die Seite auslöst, auf der AngularJS bereitgestellt wird. Ich habe 2 Stunden meines Lebens verloren, bevor ich es herausgefunden habe. :-)Antworten:
Ich schreibe eine Regel in web.config, nachdem sie
$locationProvider.html5Mode(true)
eingestellt wurdeapp.js
.Hoffe, hilft jemandem aus.
In meiner index.html habe ich dies hinzugefügt
<head>
Vergessen Sie nicht, IIS URL Rewrite auf dem Server zu installieren .
Auch wenn Sie Web-API und IIS verwenden, funktioniert dies, wenn sich Ihre API
www.yourdomain.com/api
aufgrund der dritten Eingabe (dritte Bedingungszeile) befindet.quelle
Die in der Frage gezeigten eingehenden IIS-Regeln funktionieren. Ich musste den Browser-Cache leeren und die folgende Zeile oben in meinem
<head>
Abschnitt der index.html-Seite hinzufügen :Das ist , weil ich mehr als eine Anwendung in localhost haben und so Anfragen an andere partials wurden genommen werden
localhost/app/view1
stattlocalhost/myApplication/app/view1
Hoffentlich hilft das jemandem!
quelle
In meinem Fall bekam ich immer wieder eine 403.14, nachdem ich die richtigen Umschreiberegeln eingerichtet hatte. Es stellte sich heraus, dass ich ein Verzeichnis hatte, das den gleichen Namen wie eine meiner URL-Routen hatte. Nachdem ich die IsDirectory-Umschreiberegel entfernt hatte, funktionierten meine Routen ordnungsgemäß. Gibt es einen Fall, in dem das Entfernen der Verzeichnisnegation Probleme verursachen kann? In meinem Fall fällt mir nichts ein. Der einzige Fall, an den ich denken kann, ist, wenn Sie mit Ihrer App ein Verzeichnis durchsuchen können.
quelle
Das Problem, nur diese beiden Bedingungen zu haben:
ist, dass sie nur funktionieren, solange die
{REQUEST_FILENAME}
physisch auf der Festplatte vorhanden sind . Dies bedeutet, dass es Szenarien geben kann, in denen eine Anforderung für eine falsch benannte Teilansicht die Stammseite anstelle einer 404 zurückgibt, was dazu führt, dass Angular zweimal geladen wird (und in bestimmten Szenarien eine unangenehme Endlosschleife verursachen kann).Daher werden einige sichere "Fallback" -Regeln empfohlen, um diese schwer zu behebenden Probleme zu vermeiden:
oder eine Bedingung, die mit einem beliebigen Dateiende übereinstimmt :
quelle
Der einfachste Weg, den ich gefunden habe, besteht darin, die Anforderungen, die 404 auslösen, an den Client umzuleiten. Dies erfolgt durch Hinzufügen eines Hashtags, auch wenn dieses festgelegt
$locationProvider.html5Mode(true)
ist.Dieser Trick funktioniert in Umgebungen mit mehr Webanwendungen auf derselben Website, für die Einschränkungen der URL-Integrität erforderlich sind (z. B. externe Authentifizierung). Hier erfahren Sie Schritt für Schritt, wie es geht
index.html
Stellen Sie das
<base>
Element richtig einweb.config
Leiten Sie zuerst 404 auf eine benutzerdefinierte Seite um, z. B. "Home / Error".
Home-Controller
Implementieren Sie eine einfach
ActionResult
zu übersetzende Eingabe in eine clientseitige Route.Dies ist der einfachste Weg.
Es ist möglich (ratsam?), Die Fehlerfunktion mit einer verbesserten Logik zu erweitern, um 404 nur dann zum Client umzuleiten, wenn die URL gültig ist, und den 404 normal auslösen zu lassen, wenn auf dem Client nichts gefunden wird. Angenommen, Sie haben diese eckigen Routen
Es ist sinnvoll, die URL nur dann zum Client umzuleiten, wenn sie mit "/ New" oder "/ Show /" beginnt.
Dies ist nur ein Beispiel für eine verbesserte Logik. Natürlich hat jede Webanwendung unterschiedliche Anforderungen
quelle
Ich habe versucht, eine einfache Angular 7-Anwendung für eine Azure-Webanwendung bereitzustellen. Alles hat gut funktioniert, bis Sie die Seite aktualisiert haben. Dabei wurde mir ein 500-Fehler-verschobener Inhalt angezeigt. Ich habe sowohl in den Angular-Dokumenten als auch in einigen Foren gelesen, dass ich meiner bereitgestellten Lösung eine web.config-Datei hinzufügen und sicherstellen muss, dass die Umschreiberegel auf die index.html-Datei zurückgreift. Nach stundenlanger Frustration und Test- und Fehlertests habe ich festgestellt, dass der Fehler recht einfach war: Hinzufügen eines Tags um mein Datei-Markup.
quelle
Ich hatte ein ähnliches Problem mit Angular und IIS, die beim manuellen Aktualisieren einen 404-Statuscode auslösten, und versuchte die am häufigsten gewählte Lösung, aber das funktionierte bei mir nicht. Ich habe auch eine Reihe anderer Lösungen ausprobiert, die sich mit WebDAV und wechselnden Handlern befassen mussten, und keine funktionierte.
Zum Glück habe ich diese Lösung gefunden und sie hat funktioniert (Teile herausgenommen, die ich nicht brauchte). Wenn also keines der oben genannten Verfahren für Sie funktioniert oder bevor Sie es versuchen, versuchen Sie dies und prüfen Sie, ob dies Ihre eckige Bereitstellung in diesem Problem behebt.
Fügen Sie das Snippet zu Ihrer Webkonfiguration im Stammverzeichnis Ihrer Site hinzu. Nach meinem Verständnis wird der 404-Statuscode aus jeder Vererbung entfernt (applicationhost.config, machine.config), dann ein 404-Statuscode auf Site-Ebene erstellt und als benutzerdefinierte 404-Seite zur Startseite zurückgeleitet.
quelle