CSS, obrazy, JS nie ładują się w IIS

126

Wszystkie moje aplikacje działały dobrze, ale nagle wszystkie witryny w IIS nie ładują css, obrazów, skryptów. Przekierowuje do strony logowania.

Jeśli się zaloguję, działa dobrze. np. mysite.com/Account/LogOn?ReturnUrl=%2fpublic%2fimages%2ficons%2f41.png

Na moim komputerze lokalnym działa dobrze bez logowania.

Imran Rashid
źródło
błędne oznaczenie, nie prawdziwe pytanie ...
Renatas M.
3
Przywróć do wersji oznaczonej, ponieważ myślę, że wiem, co powoduje to zachowanie, a tagi są istotne. Jeśli nie, zagłosuję za zamknięciem.
Tim Medora
To nie jest problem z tą konfiguracją internetową, próbowałem wszystkich odpowiedzi. Myślę, że jest to problem z IIS, ponieważ wszystkie witryny działały dobrze, zanim wdrożyłem jedną aplikację, ma to wpływ na wszystko iis
Imran Rashid
@ImranRashid - czy ta witryna dziedziczy ustawienia z innej witryny w usługach IIS?
Tim Medora
@Tim Medora - Nie, panie, nie dziedziczy z innej witryny.
Imran Rashid

Odpowiedzi:

185

Problem może polegać na tym, że usługi IIS nie obsługują zawartości statycznej, którą można skonfigurować tutaj: wprowadź opis obrazu tutaj

Źródło: http://adilmughal.com/blog/2011/11/iis-7-not-loading-css-and-image/

Windows 10:

Windows 10 w wersji powyższego okna dialogowego

Matt Kocaj
źródło
2
Miałem podobny problem, zdałem sobie sprawę, że to problem z instalacją, ale wydaje się, że włączenie zawartości statycznej rozwiązało problem!
ife labolz
5
To uratowało mój boczek, można by pomyśleć, że jest to domyślnie włączone, ale w systemie Windows 10 tak nie jest.
Justin
3
Lame, to nie jest zaznaczone domyślnie.
RayLoveless
3
@RayLoveless Myślę, że słabe jest to, że MVC wymaga twardej zależności od tej funkcji IIS, która umożliwia działanie statycznej zawartości w MVC. Myślę, że nie powinny być tak połączone. Może .NET Core to naprawi. : p
Matt Kocaj
2
Aa i znowu jesteśmy, ocaleni przez tę samą odpowiedź, 2 lata po ostatnim razem.
Eric Wu
176

Miałem ten sam problem, nieuwierzytelniona strona nie ładowała CSS, JS i obrazów po zainstalowaniu mojej aplikacji internetowej w ASP.Net 4.5 w IIS 8.5 na Windows Server 2012 R2.

  1. Miałem zainstalowaną rolę zawartości statycznej
  2. Moja aplikacja internetowa znajdowała się w folderze wwwroot usług IIS, a wszystkie uprawnienia do folderów systemu Windows pozostały nienaruszone (domyślne, w tym IIS_IUSRS)
  3. Dodałem autoryzację do wszystkich folderów, które zawierały CSS, JS i obrazy.
  4. Miałem folder aplikacji sieciowej w udziale Windows, więc usunąłem udostępnianie zgodnie z sugestią @ imran-rashid

Wydawało się jednak, że nic nie rozwiązało problemu. W końcu spróbowałem ustawić tożsamość anonimowego użytkownika na tożsamość puli aplikacji i zaczęło działać.

Kliknij opcję uwierzytelniania Edytuj uwierzytelnianie anonimowe Zmień na tożsamość puli aplikacji

Uderzyłem się w głowę przez kilka godzin i mam nadzieję, że ta odpowiedź uratuje cierpienie innym programistom.

Naprawdę chciałbym wiedzieć, dlaczego to działa. jakieś pomysły?

Moiz Tankiwala
źródło
1
To też zadziałało dla mnie. Wydaje mi się, że dzieje się tak, ponieważ „Określony użytkownik” nie miał uprawnień do lokalizacji folderu, w której znajduje się tożsamość puli aplikacji.
dcinadr
4
Kilka godzin ? Zajęło mi to więcej niż 4. Dzięki Bogu, pomogło mi :)
Tito
3
Ten problem pojawił się nagle po udostępnieniu folderu wwwroot. Twoje rozwiązanie to naprawiło. Dziękuję za poświęcenie czasu na dodanie i za szczegóły.
Zasób
1
LEGENDA! Wielkie dzięki
David
1
To drugi raz, kiedy musiałem szukać twojego posta, b / c to uratowało mnie teraz dwa razy. Głosowałbym za tobą 100x, gdybym mógł. Używałem Umbraco - skonfigurowałem lokalne usługi IIS za pomocą Documents \ Visual Studio 2013 \ Projects - dodane CPUName\IIS_IUSRSi nadal nie można było załadować. Dzięki jeszcze raz!
Rob Scott,
18

Miałem podobny błąd, moja konsola wyglądała tak:

błąd

Mój problem polegał na tym, że prowadziłem witrynę w podfolderze, ponieważ firma korzystała z jednej domeny głównej i żadnych domen podrzędnych. Lubię to:

host.com/app1

host.com/app2

Mój kod wyglądał tak, aby zawierał skrypty, które działały dobrze na hoście lokalnym, ale nie w app1 lub app2:

<link rel="stylesheet" type="text/css" href="/Content/css/font-awesome.min.css" />

Dodano znak tyldy ~do src i wszystko działało:

<link rel="stylesheet" type="text/css" href="~/Content/css/font-awesome.min.css" />

Wyjaśnienie ~vs /:

  • / - Katalog główny witryny
  • ~/ - Katalog główny aplikacji

/zwróci katalog główny witryny ( http://host.com/),

~/zwróci katalog główny aplikacji ( http://host.com/app1/).

Ogglas
źródło
1
głos w górę. Miałem ten problem, aplikacja nie ładowała się na scenie, ale ładowała się na produkcji. Używam też @ Url.Content () z ~ /. Nie testowane na produkcji, ale myślę, że
zadziała
17

Spróbuj usunąć sekcję staticContent z pliku web.config .

<system.webServer>
    <staticContent>
        ...
    </staticContent>
</system.webServer>
intrepidis
źródło
Usunięcie staticContent działa, ale teraz wszystkie moje czcionki to 404?
Rajesh Sivasankaran
Nie jestem w tym ekspertem, ale być może musisz dodać prawidłowe deklaracje typu MIME dla czcionek za pośrednictwem Menedżera IIS na karcie Nagłówki HTTP we właściwościach witryny.
intrepidis
1
To rozwiązało problem, ponieważ mam tam pewne wpisy w pliku .woff w fazie rozwoju, ale na produkcji ta sama konfiguracja wymaga korekty
przewodnikX
Dzięki intrepidis, w moim przypadku twoja sugestia zadziałała dla mnie. Twoje zdrowie!
user752746
15

To może nie odpowiadać na twoje pytanie, ale uderzałem głową z tymi samymi objawami w nowej instalacji IIS. CSS, JS i obrazy nie były wyświetlane. Wynikało to z tego, że rola „Zawartość statyczna” nie została zainstalowana w usługach IIS 7.5.

user23462
źródło
Możesz mieć inny problem, a mój problem polegał na tym, że kiedy przenoszę katalog z inetpub, usuwam uprawnienia po przywróceniu mojego problemu.
Imran Rashid
7

Prawdopodobnie masz włączone uwierzytelnianie systemu Windows w pliku web.config. Na komputerze lokalnym poświadczenia systemu Windows są automatycznie przekazywane i działa. W działającej witrynie jesteś traktowany jak anonimowy użytkownik (ustawienie IE może to kontrolować, ale nie modyfikuj tego, chyba że naprawdę wiesz, co robisz).

Powoduje to:

  • Musisz jawnie się zalogować.
  • Zasoby takie jak skrypty i CSS nie są udostępniane na stronie logowania, ponieważ nie jesteś uwierzytelniony.

To nie jest zepsute, po prostu działa zgodnie z przeznaczeniem, ale aby „naprawić” to:

  • Zmień typ uwierzytelniania w pliku web.config, jeśli nie chcesz żadnego logowania.
  • I / lub dodaj plik web.config w katalogach zawierających CSS, obrazy, skrypty itp., Który określa zasady autoryzacji.
Tim Medora
źródło
tryb uwierzytelniania to Formularze, a nie okno? plik konfiguracji sieciowej aplikacji nadpisuje konfigurację komputera? Czy jest to spowodowane jakimś ustawieniem w usługach IIS?
Imran Rashid
Uwierzytelnianie za pomocą formularzy spowoduje również wyświetlenie monitu o logowanie i uniemożliwi udostępnianie zasobów, takich jak skrypty i obrazy. Zobacz inne odpowiedzi, aby dowiedzieć się, jakie zmiany należy wprowadzić w pliku web.config. Zapisanie ustawień w usługach IIS spowoduje zmodyfikowanie konfiguracji sieci Web.
Tim Medora
Sam to rozwiązuję. Problem pojawia się, gdy udostępniam folder wwwroot w mojej sieci. Zmienia uprawnienia katalogu. Kiedy cofam udostępnianie i ustawiam uprawnienia na domyślne. Rozwiązało się :) Dzięki Tim
Imran Rashid
6

Dodaj to do swojego pliku web.config

<location path="Images">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
Mathias F.
źródło
Ścieżka jest względna, czasami dodanie katalogu głównego rozwiązuje ten problem. Spróbuj ustawić ścieżkę na"~/Images"
StuperUser
6

Użyj tego w sekcji konfiguracyjnej pliku web.config:

<location path="images">
<system.web>
  <authorization>
    <allow users="*"/>
  </authorization>
</system.web>
</location>
<location path="css">
<system.web>
  <authorization>
    <allow users="*"/>
  </authorization>
</system.web>
</location>
<location path="js">
<system.web>
  <authorization>
    <allow users="*"/>
  </authorization>
</system.web>
</location>
Rohit Vyas
źródło
6

To był problem z uprawnieniami systemu Windows, przenoszę folder, który dziedziczy złe uprawnienia. Kiedy przenoszę się do folderu wwwroot i dodam uprawnienia do użytkownika iis, zaczyna działać dobrze.

Imran Rashid
źródło
1
Miałem ten sam problem, właśnie przeniosłem pliki projektu z desktopdo wwwroot folderu, dodatkowo dodałem pełną kontrolę do usługi sieciowej, która jest związana z pulą aplikacji.
mihkov
3

U mnie dodanie tego w web.configrozwiązaniu problemu

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" >
      <remove name="UrlRoutingModule"/>    
    </modules>
</system.webServer>
ihebiheb
źródło
2

Moja godzina bólu była spowodowana zdefiniowaniem typów MIME w web.config. Potrzebowałem tego dla serwera deweloperskiego, ale lokalne IIS go nienawidziły, ponieważ powielały typy MIME ... po usunięciu ich z web.config problem z js, css i obrazami nie ładującymi się zniknął.

peroija
źródło
Trudno uwierzyć, że mogą to być zduplikowane typy MIME! Przeszukiwałem przez co najmniej godzinę, próbując różnych uprawnień użytkowników, itp., Ale skończyło się na tym, że zostały zduplikowane MIME w moim web.config: - |
Aaron Hudon
2

To jest problem z uwierzytelnianiem. W moim przypadku rozwiązano to za pomocą poniższych kroków: 1- Przejdź do menedżera IIS, w lewym okienku rozwiń katalog główny serwera i wybierz aplikację internetową z węzła Witryny. 2- Na ekranie głównym przejdź do sekcji IIS i wybierz opcję Uwierzytelnianie. 3- Włącz uwierzytelnianie anonimowe. 4- Następnie wybierz Edytuj i ustaw Edytuj anonimowe dane uwierzytelniające na tożsamość puli aplikacji.

Poświadczenia uwierzytelniania anonimowego

Alireza Abdollahnejad
źródło
Wykonałem te same kroki i problem został rozwiązany. Dzięki Alireza.
Arvind Gautam
1

W moim przypadku,

Usługi IIS mogą załadować wszystko z localhost, ale nie mogą załadować moich plików szablonów app.tagz192.168.0.123

ponieważ .tagrozszerzenia nie było na liście.

Typy MIME usług IIS

Hiep
źródło
1

Aby to naprawić:

Przejdź do Internetowych usług informacyjnych (IIS)

Kliknij witrynę, na którą próbujesz załadować obraz

W sekcji IIS otwórz menu Uwierzytelnianie i Włącz także uwierzytelnianie systemu Windows.

Naijalivemedia
źródło
1

Jedna sugestia, którą w przeszłości uznałem za pomocną podczas tworzenia witryn w środowisku testowym hosta lokalnego, podczas pracy z kopią witryny produkcyjnej. Upewnij się, że skomentowałeś tagi kanoniczne:

  <!--<base href="http://www.example.com/">//-->
yardpenalty.com
źródło
1

Jeśli wypróbowałeś wszystkie powyższe rozwiązania i nadal masz problemy, rozważ użycie metody ResolveClientUrl () z ASP.NET.

Skrypt na przykład:

Zamiast używać

<script src="~/dist/js/app.min.js" ></script>

Użyj metody

<script src="<%= ResolveClientUrl("~/dist/js/app.min.js") %>" ></script>

To było moje rozwiązanie, które zadziałało dla znajomego, któremu pomagałem!

KeitelDOG
źródło
1

Miałem ten sam problem. U mnie było to spowodowane ustawieniem nagłówka Cache-Control na poziomie serwera w IIS na no-cache, no-store. Więc dla mojej aplikacji musiałem dodać poniżej do mojego web.config:

<httpProtocol>
    <customHeaders>
        <remove name="Cache-Control" />
    </customHeaders>
</httpProtocol>
Daniel Cox
źródło
0

Jedną z możliwych przyczyn jest to, że aplikacja oczekuje, że będzie działać na porcie 443 (standardowy port SSL), a port 443 jest już używany. Kilka razy spotkałem się z tym, gdy programiści próbowali uruchomić naszą aplikację, gdy Skype jest uruchomiony na ich komputerach.

Niesamowite, Skype działa na porcie 443. Moim zdaniem jest to straszna wada projektowa. Jeśli zobaczysz, że Twoja aplikacja próbuje działać na 444 zamiast 443, zamknij Skype, a problem zniknie.

Robert MacGrogan
źródło
0

Dodałem app.UseStaticFiles();ten kod w starup.cs metody Configure, niż jest to naprawione.

I sprawdź swoje uprawnienia do tego folderu.

Metin Atalay
źródło
0

Do zdjęć użyj

@Url.Content("~/assets/bg4.jpg")

w stylu użyj tego

style="background-image:url(@Url.Content("~/assets/bg4.jpg"))
Maximiliano Cesán
źródło
0

W moim przypadku, gdy żaden z moich plików javascript, png ani css nie ładował się, wypróbowałem większość powyższych odpowiedzi i żadna nie wydawała się działać.

W końcu znalazłem „ Request Filters ” i musiałem dodać .js, .png, .css jako włączony / zaakceptowany typ pliku.

Po wprowadzeniu tej zmiany wszystkie pliki były poprawnie obsługiwane.

Merr Leader
źródło
0

Jeśli widzisz błędy 403 w konsoli przeglądarki, sprawdź konfigurację pakietu MVC. Nazwy pakietów nie powinny pasować do żadnych istniejących nazw folderów w projekcie.

na przykład.

bundles.Add(new StyleBundle("~/Content/css")...

... spowodowałoby problemy dla usług IIS, gdyby struktura folderów $ (ProjectDir) \ Content \ css istniała w twoim projekcie, ponieważ próbuje przeszukać istniejący folder w poszukiwaniu zawartości pakietu, której tam nie ma.

Zamiast tego po prostu użyj czegoś takiego:

bundles.Add(new StyleBundle("~/Content/cssbundle")...
ShhTot
źródło
0

Ten problem występuje, gdy usługi IIS nie renderują zawartości statycznej, takiej jak pliki JS, CSS, obrazy.

Aby rozwiązać ten problem, wykonaj poniższe czynności:

Przejdź do Panelu sterowania> Włącz lub wyłącz funkcje systemu Windows> Internetowe usługi informacyjne> Usługi World Wide Web> Typowe funkcje HTTP> Zawartość statyczna.

Upewnij się, że zawartość statyczna jest włączona.

Bingo. Gotowe. Załaduj ponownie stronę, a zobaczysz całą statyczną zawartość.

Aman Agarwal
źródło
0

Miałem dokładnie ten sam problem, wypróbowałem wszystkie sugestie, ale nic nie uzyskałem. Wkurzył mnie godzinami. Okazało się, że mój dostawca usług internetowych zablokował port 80 z kilku powodów.

Rada: sprawdź ruch. Upewnij się, że port 80 działa zarówno lokalnie (tj. Zapora), jak i zewnętrznie.

Wahaha
źródło