When IIS 7.5 serves ASPX pages flawlessly but chokes on static files, we're typically looking at either MIME type misconfigurations or deeper permission issues. Here's what I discovered while troubleshooting a similar production server:
dism /online /get-features | find "Static-Content"
The most common culprit is missing MIME types. Verify these essential types exist:
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".html" mimeType="text/html" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<mimeMap fileExtension=".js" mimeType="application/javascript" />
<mimeMap fileExtension=".png" mimeType="image/png" />
</staticContent>
</system.webServer>
</configuration>
Sometimes ASP.NET handlers hijack static file requests:
<system.webServer>
<handlers>
<remove name="StaticFile" />
<add name="StaticFile" path="*" verb="*"
modules="StaticFileModule"
resourceType="Either"
requireAccess="Read" />
</handlers>
</system.webServer>
Beyond basic IUSR permissions, try:
icacls "C:\inetpub\wwwroot\mysite" /grant "IIS_IUSRS:(OI)(CI)(RX)"
icacls "C:\inetpub\wwwroot\mysite" /grant "USERS:(OI)(CI)(RX)"
Quick health checks:
Get-WebConfigurationProperty -Filter "/system.webServer/staticContent/mimeMap" -Name *
Test-WebConfiguration -VirtualPath "/" -Item "Static Content"
Even with .NET 4.0 Integrated mode, check:
appcmd list apppool /text:*
appcmd set config /section:applicationPools /[name='MyAppPool'].enable32BitAppOnWin64:false
When your IIS 7.5 serves ASPX pages flawlessly but chokes on basic static files, you're likely facing one of these fundamental issues:
HTTP/1.1 200 OK
Content-Type: text/plain // Wrong! Should be image/png or text/css
Server: Microsoft-IIS/7.5
First, verify these critical settings:
- Static Content Role Service:
Server Manager > Roles > Web Server (IIS) > Add Role Services Check "Static Content" under Common HTTP Features
- Handler Mappings:
<system.webServer> <handlers> <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Either" /> </handlers> </system.webServer>
Missing MIME types force IIS to default to text/plain. Add these essential types:
<staticContent>
<mimeMap fileExtension=".html" mimeType="text/html" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<mimeMap fileExtension=".js" mimeType="application/javascript" />
<mimeMap fileExtension=".png" mimeType="image/png" />
<mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
</staticContent>
Beyond IUSR and IIS_IUSR, check these often-overlooked permissions:
- NTFS permissions on parent folders
- Application pool identity (try setting to ApplicationPoolIdentity)
- Special permissions like "List folder contents"
Enable tracing to pinpoint exactly where IIS fails:
appcmd.exe set config -section:system.webServer/tracing /enabled:"true" /commit:apphost
appcmd.exe configure trace "Default Web Site" /enable /path:*.html
For stubborn cases, reset all IIS components:
%windir%\system32\inetsrv\appcmd list app /text:name | findstr MyApp
%windir%\system32\inetsrv\appcmd delete app MyApp/
iisreset /reboot
Remember to backup configurations before drastic measures!