Mam projekt seed AngularJS i dodałem
$locationProvider.html5Mode(true).hashPrefix('!');
do pliku app.js. Chcę skonfigurować usługi IIS 7, aby kierować wszystkie żądania do
http://localhost/app/index.html
aby to działało dla mnie. Jak mam to zrobic?
Aktualizacja:
Właśnie odkryłem, pobrałem i zainstalowałem moduł ponownego zapisywania adresów URL w usługach IIS , mając nadzieję, że dzięki temu osiągnięcie mojego celu będzie łatwe i oczywiste.
Aktualizacja 2 :
To chyba podsumowuje to, co próbuję osiągnąć (zaczerpnięte z dokumentacji programisty AngularJS ):
Korzystanie z tego trybu wymaga przepisywania adresu URL po stronie serwera, w zasadzie musisz przepisać wszystkie linki do punktu wejścia aplikacji (np. Index.html)
Aktualizacja 3:
Nadal nad tym pracuję i zdaję sobie sprawę, że NIE muszę przekierowywać (mieć reguł, które przepisują) niektórych adresów URL, takich jak
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html
więc wszystko, co znajduje się w katalogach css, js, lib lub częściowych, nie jest przekierowywane. Wszystko inne będzie musiało zostać przekierowane do app / index.html
Czy ktoś wie, jak łatwo to osiągnąć bez konieczności dodawania reguły dla każdego pliku?
Aktualizacja 4:
Mam 2 reguły ruchu przychodzącego zdefiniowane w module ponownego zapisywania adresów URL usług IIS. Pierwsza zasada to:
Druga zasada to:
Teraz, kiedy przechodzę do localhost / app / view1, ładuje stronę, jednak pliki pomocnicze (te w katalogach css, js, lib i częściowe) są również przepisywane na stronę app / index.html - więc wszystko nadchodzi jako strona index.html bez względu na użyty adres URL. Myślę, że oznacza to, że moja pierwsza reguła, która ma zapobiegać przetwarzaniu tych adresów URL przez drugą regułę, nie działa ... jakieś pomysły? ...ktoś? ...Czuję się taki samotny... :-(
źródło
app/index.html
a nieapp/
jawne jej wyzwalanie. Straciłem 2 godziny życia, zanim to rozgryzłem. :-)Odpowiedzi:
Piszę regułę w web.config po
$locationProvider.html5Mode(true)
ustawieniuapp.js
.Hope, pomaga komuś.
W moim index.html dodałem to do
<head>
Nie zapomnij zainstalować usługi IIS URL Rewrite na serwerze.
Również jeśli używasz internetowego interfejsu API i IIS, zadziała to, jeśli twój interfejs API jest
www.yourdomain.com/api
ustawiony z powodu trzeciego wejścia (trzecia linia warunku).źródło
Reguły ruchu przychodzącego usług IIS, jak pokazano w pytaniu, działają. Musiałem wyczyścić pamięć podręczną przeglądarki i dodać następujący wiersz w górnej części mojej
<head>
sekcji strony index.html:Dzieje się tak, ponieważ mam więcej niż jedną aplikację na hoście lokalnym, więc
localhost/app/view1
zamiast tego były kierowane żądania do innych częścilocalhost/myApplication/app/view1
Mam nadzieję, że to komuś pomoże!
źródło
W moim przypadku otrzymywałem 403.14 po skonfigurowaniu prawidłowych reguł przepisywania. Okazuje się, że miałem katalog o tej samej nazwie, co jedna z moich tras URL. Po usunięciu reguły przepisywania IsDirectory moje trasy działały poprawnie. Czy istnieje przypadek, w którym usunięcie negacji katalogu może spowodować problemy? Nie mogę wymyślić żadnego w moim przypadku. Jedyny przypadek, jaki przychodzi mi do głowy, to przeglądanie katalogu za pomocą aplikacji.
źródło
Problem z spełnieniem tylko tych dwóch warunków:
jest to, że działają tylko tak długo, jak długo
{REQUEST_FILENAME}
istnieją fizycznie na dysku . Oznacza to, że mogą istnieć scenariusze, w których żądanie niepoprawnie nazwanego częściowego widoku zwróci stronę główną zamiast 404, co spowodowałoby dwukrotne załadowanie angulara (aw niektórych scenariuszach może spowodować nieprzyjemną nieskończoną pętlę).Dlatego zaleca się stosowanie pewnych bezpiecznych reguł „awaryjnych”, aby uniknąć tych trudnych do rozwiązania problemów:
lub warunek, który pasuje do dowolnego zakończenia pliku :
źródło
Najłatwiejszym sposobem, jaki znalazłem, jest po prostu przekierowanie żądań, które wyzwalają 404, do klienta. Odbywa się to poprzez dodanie hashtagu, nawet jeśli
$locationProvider.html5Mode(true)
jest ustawiony.Ta sztuczka działa w środowiskach z większą liczbą aplikacji internetowych w tej samej witrynie sieci Web i wymagających ograniczeń integralności adresu URL (zewnętrzne uwierzytelnianie EG). Oto krok po kroku, jak to zrobić
index.html
Ustaw
<base>
element prawidłowoweb.config
Pierwsze przekierowanie 404 na stronę niestandardową, na przykład „Strona główna / Błąd”
Kontroler domowy
Zaimplementuj proste
ActionResult
do „przetłumaczenia” dane wejściowe w trasie po stronie klienta.To jest najprostszy sposób.
Jest możliwe (zalecane?) Rozszerzenie funkcji Error o ulepszoną logikę, aby przekierować 404 do klienta tylko wtedy, gdy adres URL jest prawidłowy i pozwolić 404 wyzwalać się normalnie, gdy nic nie zostanie znalezione na kliencie. Powiedzmy, że masz te kątowe trasy
Przekierowywanie adresu URL do klienta ma sens tylko wtedy, gdy zaczyna się od „/ New” lub „/ Show /”
To tylko przykład ulepszonej logiki, oczywiście każda aplikacja internetowa ma inne potrzeby
źródło
Próbowałem wdrożyć prostą aplikację Angular 7 w aplikacji internetowej platformy Azure. Wszystko działało dobrze, aż do momentu odświeżenia strony. Robiąc to, pokazywał mi błąd 500 - przeniesiona treść. Przeczytałem zarówno w dokumentacji Angular, jak i na kilku dobrych forach, że muszę dodać plik web.config do mojego wdrożonego rozwiązania i upewnić się, że reguła przepisywania powraca do pliku index.html. Po wielu godzinach frustracji i testów metodą prób i błędów stwierdziłem, że błąd był dość prosty: dodanie tagu wokół mojego znacznika pliku.
źródło
Miałem podobny problem z Angularem i IIS wyrzucającymi kod stanu 404 podczas ręcznego odświeżania i wypróbowałem rozwiązanie najczęściej wybierane, ale to nie zadziałało. Wypróbowano również kilka innych rozwiązań, które musiały radzić sobie z WebDAV i zmieniającymi się programami obsługi, ale żadne nie działało.
Na szczęście znalazłem to rozwiązanie i zadziałało (wyjąłem części, których nie potrzebowałem). Więc jeśli żadne z powyższych nie działa dla Ciebie lub nawet przed ich wypróbowaniem, spróbuj tego i sprawdź, czy to rozwiązuje problem z wdrożeniem kątowym w przypadku iis.
Dodaj fragment kodu do swojej konfiguracji internetowej w katalogu głównym swojej witryny. Z mojego zrozumienia usuwa kod stanu 404 z dowolnego dziedziczenia (applicationhost.config, machine.config), a następnie tworzy kod stanu 404 na poziomie witryny i przekierowuje z powrotem na stronę główną jako niestandardową stronę 404.
źródło