CSS, Images, JS werden nicht in IIS geladen

126

Alle meine Anwendungen funktionierten einwandfrei, aber plötzlich laden alle Websites unter IIS keine CSS, Bilder oder Skripte mehr. Es wird zur Anmeldeseite weitergeleitet.

Wenn ich mich anmelde, funktioniert es gut. zB mysite.com/Account/LogOn?ReturnUrl=%2fpublic%2fimages%2ficons%2f41.png

Auf meinem lokalen Computer funktioniert es ohne Anmeldung.

Imran Rashid
quelle
falsche Kennzeichnung, keine wirkliche Frage ...
Renatas M.
3
Rollback auf die getaggte Version, da ich glaube zu wissen, was dieses Verhalten verursacht und die Tags relevant sind. Wenn nicht, werde ich abstimmen, um zu schließen.
Tim Medora
Es ist kein Problem mit dieser Webkonfiguration. Ich habe alle Antworten ausprobiert. Ich denke, es ist ein Problem mit IIS, weil alle Websites einwandfrei funktionierten, bevor ich eine Anwendung bereitstellte, die sich auf iis auswirkte
Imran Rashid
@ImranRashid - Erbt diese Site Einstellungen von einer anderen Site in IIS?
Tim Medora
@ Tim Medora - Nein, Sir, es erbt nicht von einer anderen Site.
Imran Rashid

Antworten:

185

Das Problem kann sein, dass IIS keinen statischen Inhalt bereitstellt, den Sie hier einrichten können: Geben Sie hier die Bildbeschreibung ein

Quelle: http://adilmughal.com/blog/2011/11/iis-7-not-loading-css-and-image/

Windows 10:

Windows 10-Version des obigen Dialogfelds

Matt Kocaj
quelle
2
Ich hatte ein ähnliches Problem und stellte fest, dass es sich um ein Installationsproblem handelte, aber das Aktivieren des statischen Inhalts scheint es behoben zu haben!
Ife Labolz
5
Dies hat meinen Speck gerettet. Sie würden denken, dass dies standardmäßig aktiviert war, aber unter Windows 10 ist dies nicht der Fall.
Justin
3
Lahm, das ist nicht standardmäßig aktiviert.
RayLoveless
3
@ RayLoveless Ich denke, was lahm ist, ist, dass MVC eine starke Abhängigkeit von dieser IIS-Funktion hat, die aktiviert ist, damit statische Inhalte in MVC funktionieren. Ich denke, sie sollten nicht so gekoppelt sein. Vielleicht wird .NET Core dies beheben. : p
Matt Kocaj
2
Und hier sind wir wieder, gerettet durch die gleiche Antwort, 2 Jahre nach dem letzten Mal.
Eric Wu
176

Ich hatte das gleiche Problem: Eine nicht authentifizierte Seite lud CSS, JS und Images nicht, wenn ich meine Webanwendung in ASP.Net 4.5 in IIS 8.5 unter Windows Server 2012 R2 installierte.

  1. Ich hatte die statische Inhaltsrolle installiert
  2. Meine Webanwendung befand sich im Ordner wwwroot von IIS, und alle Windows-Ordnerberechtigungen waren intakt (die Standardberechtigungen, einschließlich IIS_IUSRS).
  3. Ich habe die Berechtigung für alle Ordner hinzugefügt, die CSS, JS und Bilder enthalten.
  4. Ich hatte den Webanwendungsordner auf einer Windows-Freigabe, daher habe ich die Freigabe entfernt, wie von @ imran-rashid vorgeschlagen

Nichts schien das Problem zu lösen. Dann habe ich endlich versucht, die Identität des anonymen Benutzers auf die App-Pool-Identität zu setzen, und es hat funktioniert.

Klicken Sie auf die Authentifizierungsfunktion Bearbeiten Sie die anonyme Authentifizierung Wechseln Sie zur App-Pool-Identität

Ich habe ein paar Stunden lang mit dem Kopf geschlagen und hoffe, dass diese Antwort den anderen Entwicklern die Qual erspart.

Ich würde wirklich gerne wissen, warum das funktioniert. Irgendwelche Gedanken?

Moiz Tankiwala
quelle
1
Das hat auch bei mir funktioniert. Ich glaube, das liegt daran, dass der "Bestimmte Benutzer" keine Berechtigungen für den Ordner hatte, in dem sich die Identität des Anwendungspools befindet.
Dcinadr
4
Wenige Stunden ? Es hat mich mehr als 4 gekostet. Gott sei Dank hat es mir geholfen :)
Tito
3
Ich habe dieses Problem plötzlich bekommen, nachdem ich den wwwroot-Ordner freigegeben habe. Ihre Lösung hat das Problem behoben. Vielen Dank, dass Sie sich die Zeit genommen haben, es hinzuzufügen, und für das Detail.
Ressource
1
LEGENDE! Vielen Dank
David
1
Dies ist das zweite Mal, dass ich nach deinem Beitrag suchen musste, b / c es hat mich jetzt zweimal gerettet. Ich würde dich 100x positiv bewerten, wenn ich könnte. Wurde Umbraco verwendet - mein lokales IIS mit Documents \ Visual Studio 2013 \ Projects einrichten - hinzugefügt CPUName\IIS_IUSRSund immer noch nicht geladen. Danke noch einmal!
Rob Scott
18

Ich hatte einen ähnlichen Fehler, meine Konsole sah folgendermaßen aus:

Error

Mein Problem war, dass ich meine Site in einem Unterordner ausführte, da das Unternehmen eine Top-Domain und keine Sub-Domains verwendete. So was:

host.com/app1

host.com/app2

Mein Code sah so aus, weil er Skripte enthielt, die auf localhost gut funktionierten, aber nicht in app1 oder app2:

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

Ein Tilde-Zeichen ~zu src hinzugefügt und dann hat alles funktioniert:

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

Erklärung von ~vs /:

  • / - Site-Root
  • ~/ - Stammverzeichnis der Anwendung

/gibt das Stammverzeichnis der Site zurück ( http://host.com/),

~/gibt das Stammverzeichnis der Anwendung zurück ( http://host.com/app1/).

Ogglas
quelle
1
up Abstimmung. Ich hatte dieses Problem, die App wurde nicht auf der Bühne geladen, sondern in der Produktion. Ich benutze auch @ Url.Content () mit ~ /. Nicht in der Produktion getestet, aber ich denke, es wird funktionieren
Kross
17

Versuchen Sie, den Abschnitt staticContent aus Ihrer web.config zu entfernen .

<system.webServer>
    <staticContent>
        ...
    </staticContent>
</system.webServer>
unerschrocken
quelle
Das Entfernen von staticContent funktioniert, aber jetzt sind alle meine Schriftarten 404?
Rajesh Sivasankaran
Ich bin kein Experte in diesem Bereich, aber möglicherweise müssen Sie die richtigen MIME-Typdeklarationen für Ihre Schriftarten über IIS Manager auf der Registerkarte HTTP-Header der Website-Eigenschaften hinzufügen.
intrepidis
1
Dies löste das Problem für mich, da ich dort einige .woff-Dateieinträge in der Entwicklung habe, aber in der Produktion muss das gleiche Setup angepasst werden
guideX
Danke unerschrocken, in meinem Fall hat Ihr Vorschlag für mich funktioniert. Prost!
user752746
15

Dies beantwortet Ihre Frage möglicherweise nicht, aber ich habe mir bei einer neuen IIS-Installation den Kopf mit den gleichen Symptomen geschlagen. CSS, JS und Bilder wurden nicht angezeigt. Wurde aufgrund der Rolle "Statischer Inhalt" nicht in IIS 7.5 installiert.

user23462
quelle
Möglicherweise haben Sie ein anderes Problem, und mein Problem war, dass beim Verschieben des Verzeichnisses aus dem Inetpub die Berechtigungen entfernt wurden, wenn ich das Problem rückgängig machte.
Imran Rashid
7

In Ihrer web.config ist wahrscheinlich die Windows-Authentifizierung aktiviert. Auf einem lokalen Computer werden Ihre Windows-Anmeldeinformationen automatisch übergeben und es funktioniert. Auf einer Live-Site werden Sie als anonymer Benutzer behandelt (die IE-Einstellung kann dies steuern, aber ändern Sie dies nur, wenn Sie wirklich wissen, was Sie tun).

Dies verursacht Folgendes:

  • Sie müssen sich explizit anmelden.
  • Ressourcen wie Skripte und CSS werden auf der Anmeldeseite nicht bereitgestellt, da Sie nicht authentifiziert sind.

Dies ist nicht kaputt, funktioniert nur wie beabsichtigt, sondern um dies zu "beheben":

  • Ändern Sie den Authentifizierungstyp in der Datei web.config, wenn Sie keine Anmeldung wünschen.
  • Und / oder fügen Sie eine web.config in das Verzeichnis (die Verzeichnisse) ein, die CSS, Bilder, Skripte usw. enthalten, in dem die Autorisierungsregeln angegeben sind.
Tim Medora
quelle
Authentifizierungsmodus ist Formulare nicht Fenster? Anwendungs-Webkonfigurationsdatei Maschinenkonfiguration überschreiben? Gibt es eine Einstellung in IIS, die dies verursacht?
Imran Rashid
Die Formularauthentifizierung löst auch eine Anmeldeaufforderung aus und verhindert, dass Ressourcen wie Skripte und Bilder bereitgestellt werden. In den anderen Antworten finden Sie die spezifischen Änderungen, die Sie an web.config vornehmen müssen. Durch das Speichern von Einstellungen in IIS wird die Webkonfiguration geändert.
Tim Medora
Ich löse es selbst. Das Problem tritt auf, wenn ich den Ordner wwwroot in meinem Netzwerk freigebe. Es ändert die Berechtigung des Verzeichnisses. Wenn ich die Freigabe aufhebe und die Berechtigung auf Standard setze. Es hat sich gelöst :) Danke Tim
Imran Rashid
6

Fügen Sie dies Ihrer web.config hinzu

<location path="Images">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
Mathias F.
quelle
Der Pfad ist relativ. Manchmal wird dies durch Hinzufügen des Stamms behoben. Versuchen Sie, den Pfad auf"~/Images"
StuperUser
6

Verwenden Sie dies im Konfigurationsabschnitt Ihrer web.config-Datei:

<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
quelle
6

Es war ein Windows-Berechtigungsproblem. Ich verschiebe den Ordner, der falsche Berechtigungen erbt. Wenn ich in den Ordner wwwroot gehe und meinem Benutzer die Berechtigung hinzufüge, funktioniert es einwandfrei.

Imran Rashid
quelle
1
Ich hatte das gleiche Problem. Ich habe gerade die Projektdateien aus desktopdem wwwroot Ordner verschoben. Außerdem habe ich dem Netzwerkdienst, der sich auf den Anwendungspool bezieht, die volle Kontrolle hinzugefügt.
Mihkov
3

Für mich hat das Hinzufügen in web.configdas Problem behoben

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" >
      <remove name="UrlRoutingModule"/>    
    </modules>
</system.webServer>
ihebiheb
quelle
2

Meine Stunde des Schmerzes war auf die Definition von MIME-Typen in der web.config zurückzuführen. Ich brauchte dies für den Entwicklungsserver, aber lokaler IIS hasste es, weil es MIME-Typen duplizierte ... Sobald ich diese aus der web.config entfernte, verschwand das Problem mit js, css und Bildern, die nicht geladen wurden.

Peroija
quelle
Kaum zu glauben, dass es sich um doppelte MIME-Typen handeln kann! Ich habe mindestens eine Stunde lang nach verschiedenen Benutzerberechtigungen usw. gesucht, aber es wurden doppelte MIMEs in meiner web.config: - |
Aaron Hudon
2

Dies ist ein Authentifizierungsproblem. In meinem Fall wurde dies durch die folgenden Schritte gelöst: 1- Gehen Sie zum IIS-Manager, erweitern Sie im linken Bereich das Serverstammverzeichnis und wählen Sie Ihre Webanwendung vom Knoten Sites aus. 2- Gehen Sie auf dem Startbildschirm zum Abschnitt IIS und wählen Sie Authentifizierung. 3- Aktivieren Sie die anonyme Authentifizierung. 4- Wählen Sie dann Bearbeiten und setzen Sie Anonyme Authentifizierungsdaten bearbeiten auf Identität des Anwendungspools.

Anonyme Authentifizierungsdaten

Alireza Abdollahnejad
quelle
Ich habe die gleichen Schritte ausgeführt und das Problem wurde behoben. Danke Alireza.
Arvind Gautam
1

In meinem Fall,

IIS kann alles mit laden localhost, aber meine Vorlagendateien app.tagvon nicht laden192.168.0.123

weil die .tagErweiterung nicht in der Liste war.

IIS-MIME-Typen

Hiep
quelle
1

Um dies zu beheben:

Gehen Sie zu Internet Information Service (IIS).

Klicken Sie auf Ihre Website, auf die Sie ein Bild laden möchten

Öffnen Sie im Abschnitt IIS das Menü Authentifizierung und aktivieren Sie auch die Windows-Authentifizierung.

Naijalivemedia
quelle
1

Ein Vorschlag, den ich in der Vergangenheit bei der Entwicklung von Standorten in einer lokalen Host-Testumgebung als hilfreich empfunden habe, wenn ich mit einer Kopie des Produktionsstandorts arbeite. Stellen Sie sicher, dass Sie die kanonischen Tags auskommentieren:

  <!--<base href="http://www.example.com/">//-->
yardpenalty.com
quelle
1

Wenn Sie alle oben genannten Lösungen ausprobiert haben und dennoch Probleme haben, sollten Sie die Methode ResolveClientUrl () von ASP.NET verwenden.

Ein Skript zum Beispiel:

Anstatt zu verwenden

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

Verwenden Sie die Methode

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

Dies war meine Lösung, die für einen Freund funktionierte, dem ich half!

KeitelDOG
quelle
1

Ich hatte das gleiche Problem. Für mich lag es daran, dass der Cache-Control-Header auf Serverebene in IIS auf No-Cache, No-Store gesetzt wurde. Für meine Bewerbung musste ich meiner web.config Folgendes hinzufügen:

<httpProtocol>
    <customHeaders>
        <remove name="Cache-Control" />
    </customHeaders>
</httpProtocol>
Daniel Cox
quelle
0

Eine mögliche Ursache hierfür ist, dass Ihre Anwendung voraussichtlich auf Port 443 (Standard-SSL-Port) ausgeführt wird und Port 443 bereits verwendet wird. Ich bin mehrmals darauf gestoßen, als Entwickler versuchten, unsere Anwendung auszuführen, während Skype auf ihren Computern ausgeführt wird.

Unglaublicherweise läuft Skype auf Port 443. Dies ist meiner Meinung nach ein schrecklicher Designfehler. Wenn Sie sehen, dass Ihre Anwendung versucht, auf 444 statt auf 443 ausgeführt zu werden, fahren Sie Skype herunter, und das Problem wird behoben.

Robert MacGrogan
quelle
0

Ich habe app.UseStaticFiles();diesen Code in starup.cs der Configure-Methode hinzugefügt , als er behoben wurde.

Und überprüfen Sie Ihre Berechtigung für diesen Ordner.

Metin Atalay
quelle
0

Für Bilder verwenden

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

Verwenden Sie dies für einen Stil

style="background-image:url(@Url.Content("~/assets/bg4.jpg"))
Maximiliano Cesán
quelle
0

In meinem Fall, als keine meiner Javascript-, PNG- oder CSS-Dateien geladen wurde, habe ich die meisten der oben genannten Antworten ausprobiert und keine schien den Trick zu tun.

Ich fand schließlich " Anforderungsfilter " und musste tatsächlich .js, .png, .css als aktivierten / akzeptierten Dateityp hinzufügen.

Nachdem ich diese Änderung vorgenommen hatte, wurden alle Dateien ordnungsgemäß bereitgestellt.

Merr Leader
quelle
0

Wenn in Ihrer Browserkonsole 403 Fehler angezeigt werden, überprüfen Sie Ihre MVC Bundle-Konfiguration. Bundle-Namen sollten nicht mit vorhandenen Ordnernamen in Ihrem Projekt übereinstimmen.

z.B.

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

... würde Probleme für IIS verursachen, wenn die Ordnerstruktur $ (ProjectDir) \ Content \ css in Ihrem Projekt vorhanden ist, da versucht wird, im vorhandenen Ordner nach Bundle-Inhalten zu suchen, die nicht vorhanden sind.

Verwenden Sie stattdessen einfach etwas wie:

bundles.Add(new StyleBundle("~/Content/cssbundle")...
ShhTot
quelle
0

Dieses Problem tritt auf, wenn IIS den statischen Inhalt wie Ihre JS-, CSS- und Image-Dateien nicht rendert.

Um dieses Problem zu beheben, müssen Sie die folgenden Schritte ausführen:

Gehen Sie zu Systemsteuerung> Windows-Funktionen aktivieren oder deaktivieren> Internetinformationsdienste> World Wide Web Services> Allgemeine HTTP-Funktionen> Statischer Inhalt.

Stellen Sie sicher, dass statischer Inhalt aktiviert ist.

Bingo. Und du bist fertig. Laden Sie die Seite neu und Sie können alle statischen Inhalte sehen.

Aman Agarwal
quelle
0

Ich hatte genau das gleiche Problem, versuchte alle Vorschläge, bekam aber nichts. Hat mich stundenlang nervt. Es stellte sich heraus, dass mein ISP Port 80 aus bestimmten Gründen blockiert hat.

Tipp: Überprüfen Sie Ihren Verkehr. Stellen Sie sicher, dass Port 80 sowohl lokal (dh Firewall) als auch extern funktioniert.

Wahaha
quelle