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 virtualDirectoryDefaults
tag:
<sites>
…
<virtualDirectoryDefaults allowSubDirConfig="false" />
</sites>
Note: 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.
Disable inheritance
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
tag.
<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
2 thoughts on “Configure IIS to ignore web.config files in application subfolders”