You may want to consolidate your application’s settings in one
web.config file. However, the
web.config files in subfolders can override the settings of the parent folder. In order to prevent it, you need to configure IIS to ignore web.config files in application subfolders.
Here is an example of the configuration hierarchy of IIS. Note that there is a website called Site1. This website has two subfolders: SubDir1 and SubDir2 (assuming that the root application is used).
Looking for a way to prevent settings to be overridden by web.config? Check this post out.
How to ignore web.config files in application subfolders
Let’s say you don’t want the
web.config files in SubDir1 and SubDir2 folders to override settings in the
web.config file of Site1 folder. In order to achieve it, use
allowSubDirConfig attribute in your
applicationHost.config file. Here is an example:
<sites> <site name="Site1" id="1"> <application path="/"> <virtualDirectory path="/" physicalPath="D:\WebApps\Site1" allowSubDirConfig="false" /> </application> </site> </sites>
If you want this settings to be effective in all websites hosted by IIS, use
<sites> … <virtualDirectoryDefaults allowSubDirConfig="false" /> </sites>
allowSubDirConfig attribute can be used only in applicationHost.config. It is not available for web.config files (Source).
Ignore web.config for certain subfolders only
It is also possible to ignore
web.config files in certain subfolders only. However, these folders has to be virtual folders. In the example below,
web.config files are ignored in all subfolders except the one in subDir2.
<sites> <site name="Site1" id="1"> <application path="/"> <virtualDirectory path="/" physicalPath="D:\WebApps\Site1" allowSubDirConfig="false" /> <virtualDirectory path="/SubDir2" physicalPath="D:\WebApps\Site1\SubDir2" allowSubDirConfig="true" /> </application> </site> </sites>
Please note that I am using
<application path="/"> in the examples above. This is the root application which is created when you add a new website. If you have a specific application, make sure to use it in your config files.
What if you want to allow
web.config files to be used in subfolders but you don’t want certain settings to be inherited by subfolders?
For example, your root
web.config says the only default document is
index.htm. However, your subfolder
web.config says the only default document is iisstart.htm. If there is no such file
iisstart.htm in the subfolder, root setting which is
index.htm will be inherited and used. If you want to prevent root settings to be inherited, use
inheritInChildApplications attribute in
<location path="" inheritInChildApplications="false"> <system.webServer> <defaultDocument enabled="true"> <files> <add value="index.htm" /> </files> </defaultDocument> </system.webServer> </location>
The location path in the example above is empty. It means that this setting will be applied to the level of the config file and below.
More information about
inheritInChildApplications: Link 1 and Link 2
- Understanding IIS 7.0 Configuration Delegation
- 10 Things ASP.NET Developers Should Know About Web.config Inheritance and Overrides
- ASP.NET Configuration File Hierarchy and Inheritance
- How to: Configure Specific Directories Using Location Settings
2 thoughts on “Configure IIS to ignore web.config files in application subfolders”