昨天須要新建一個虛擬目錄放在之前的一個站點下,新建了應用池,配好了環境置頂路徑,虛擬目錄頁創建成功 ,可是程序一直是報錯。這個程序我在測試服務器上是測過的,新建了一個站點是能夠正常訪問的,排除了程序問題。web
一直是報500,在webconfig配置拋出錯誤的 customErrors節點也不起做用,後來把程序所有刪掉放了一個靜態頁,是能夠訪問成功的,說明虛擬目錄的配置也是沒問題的,毫無頭緒,在網上查了很久各類配置都試過了仍是不行,今天無心中看見了一個帖子給我靈感,而後試了一下果真成功了服務器
虛擬目錄的webconfig是繼承了根目錄的webconfig的全部配置的,因此若是有節點名稱是同樣的話就會有衝突報錯。這時候極可能會出 http 500的錯誤ide
這個時候有兩種方法能夠解決測試
1.在根目錄解除子目錄的繼承spa
1 <configuration> 2 <!--...其餘配置...--> 3 <location path="." inheritInChildApplications="false"> 4 <system.web> 5 6 </system.web> 7 </location> 8 <!--...其餘配置...--> 9 </configuration>
這裏的inheritInChildApplications就是接觸子目錄webconfig的繼承,將不須要子目錄繼承的節點放在這個節點裏面就ok了.net
這種方法的優勢是很簡單,可是不夠靈活,同時面對較複雜的Web.config配置,仍可能會報錯。好比根目錄和子目錄有着不一樣的system.webServer配置,按照這個方法在根目錄的system.webServer外面加上了location限制,不幸的是,IIS7下會出現500錯誤。code
2.在子目錄對衝突的節點處理blog
根目錄節點繼承
1 <connectionStrings> 2 <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123" providerName="System.Data.SqlClient"/> 3 </connectionStrings>
子目錄節點rem
1 <connectionStrings> 2 <clear/> 3 <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123" providerName="System.Data.SqlClient"/> 4 </connectionStrings>
在衝突的節點前先clear,清除以前的配置,而後再加載下面的配置就能夠了,除了clear 還有remove也能夠
<connectionStrings> <remove name="DBConnectionString"/> <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123" providerName="System.Data.SqlClient"/> </connectionStrings>
這種配置方法能夠用在全部的節點上,使用起來也比較靈活,我的推薦用第二種方法。
參考來自 http://blog.csdn.net/papalian/article/details/7204248 就是我看的那篇帖子,介紹的更爲詳細一些
最後說一下,昨天從下午三點到晚上十點,今天上午又弄了一個小時。但願你們能夠用得上,之後出現一樣的問題直接就能夠用了,你們也要多分享