虚拟目录继承根Web.Config的问题解决(转)
生活随笔
收集整理的這篇文章主要介紹了
虚拟目录继承根Web.Config的问题解决(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多人有時都會為虛擬目錄中的web.config繼承了主目錄中的web.config而苦惱,大部分主要是由于根目錄中的web.config添加了httphandler、 httpmodule 引起的。 其實這個問題解決起來很簡單,只將 httphandler httpmodule的聲明添加到location中即可。 如下所示: <location path="." allowOverride="true" inheritInChildApplications="false"> <system.web> <httpModules> <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /> </httpModules> </system.web> </location> path 不用說指定的是一個目錄 allowOverride 指是否可以將這個重寫 inheritInChildApplications 指是否被子級應用程序繼承 必須在上一層虛擬目錄(如根目錄)所在的Web.config加上
如:<location path="." allowOverride="false" inheritInChildApplications="false"> </location> path 不用說指定的是一個目錄
allowOverride 指是否可以將這個重寫
inheritInChildApplications 指是否被子級應用程序繼承 一、應用身份驗證、但個別目錄或文件不需要身份驗證
最常見的是一個網站的后臺需要驗證,而前臺是不需要的;一般登錄頁面會有驗證碼、而生成驗證碼那個頁面是不需要驗證的、否則驗證圖片是顯示不出來的。
解決方法: <system.web>
????? <!-- 身份驗證 -->
????? <authentication mode="Forms">
??????? <forms name=".myForm" loginUrl="login.aspx" timeout="20" protection ="All"/>
????? </authentication>
????? <authorization >
??????? <deny users ="?"/>
????? </authorization>
??? </system.web>
? <!-- 驗證碼 -->
? <location path ="CheckCode.aspx">
??? <system.web >
????? <authorization >
??????? <allow users ="*"/>
????? </authorization>
??? </system.web>
? </location> 使用身份驗證、禁止匿名用戶訪問,同時對頁面checkcode.aspx允許所有用戶訪問、即不用驗證。
二、改寫(不需求)web.config繼承
假設IIS中有個站點A、而A站點下面有個虛擬目錄B、此時可以輸入:"ttp://ip址/" 訪問到A站點,輸入http://ip地址/B 訪問到B網站;而B項目中的web.config首先會繼承A站點的web.config,如果A的config有很多設置如<httpModules>,<page>等,而B項目的config沒有這些設置,項目也沒用到這些設置, DHL-CHINA但B的程序在運行時確會出錯、原因就是它繼承A的config;這個讓人有點討厭“我壓根沒用它、怎么會有錯?且提示出錯廣州DHL的那個文件是A的config”,可以這樣解決:
A項目用到了主題 <pages enableEventValidation="false" validateRequest="false" theme="default"> B項目不用 <pages enableEventValidation="false" validateRequest="false" theme=""> 讓B的主題為空、否則B運行時提示找不到default主題目;
A的設置 <httpModules>
????????? <add name="SiteCache" type="SiteCache"/>
??????? </httpModules> B的設置(不用的項,清除) <httpModules>
???? <clear/>
</httpModules> 如果A.B都用到 <appSettings>
? <add key="app" value="" />
</appSettings> B運行時會提示app已經加載,此時可以 <appSettings>
? <remove name="app" />
? <add key="app" value="" />
</appSettings> 或者: <appSettings>
? <clear />
? <add key="app" value="" />
</appSettings>
三、禁止web.config重寫
同上面的例子、如果B中的config設置必須與A中的相同,不能重寫,則A的config設置 ??? <location path="B" allowOverride="false">
????? <system.web>
??????? <httpModules>
????????? <add name="SiteCache" type="SiteCache"/>
??????? </httpModules>
????? </system.web>
? </location> 此時B的config中<httpModules>設置不能改寫,須和A的設置相同。
如:<location path="." allowOverride="false" inheritInChildApplications="false"> </location> path 不用說指定的是一個目錄
allowOverride 指是否可以將這個重寫
inheritInChildApplications 指是否被子級應用程序繼承 一、應用身份驗證、但個別目錄或文件不需要身份驗證
最常見的是一個網站的后臺需要驗證,而前臺是不需要的;一般登錄頁面會有驗證碼、而生成驗證碼那個頁面是不需要驗證的、否則驗證圖片是顯示不出來的。
解決方法: <system.web>
????? <!-- 身份驗證 -->
????? <authentication mode="Forms">
??????? <forms name=".myForm" loginUrl="login.aspx" timeout="20" protection ="All"/>
????? </authentication>
????? <authorization >
??????? <deny users ="?"/>
????? </authorization>
??? </system.web>
? <!-- 驗證碼 -->
? <location path ="CheckCode.aspx">
??? <system.web >
????? <authorization >
??????? <allow users ="*"/>
????? </authorization>
??? </system.web>
? </location> 使用身份驗證、禁止匿名用戶訪問,同時對頁面checkcode.aspx允許所有用戶訪問、即不用驗證。
二、改寫(不需求)web.config繼承
假設IIS中有個站點A、而A站點下面有個虛擬目錄B、此時可以輸入:"ttp://ip址/" 訪問到A站點,輸入http://ip地址/B 訪問到B網站;而B項目中的web.config首先會繼承A站點的web.config,如果A的config有很多設置如<httpModules>,<page>等,而B項目的config沒有這些設置,項目也沒用到這些設置, DHL-CHINA但B的程序在運行時確會出錯、原因就是它繼承A的config;這個讓人有點討厭“我壓根沒用它、怎么會有錯?且提示出錯廣州DHL的那個文件是A的config”,可以這樣解決:
A項目用到了主題 <pages enableEventValidation="false" validateRequest="false" theme="default"> B項目不用 <pages enableEventValidation="false" validateRequest="false" theme=""> 讓B的主題為空、否則B運行時提示找不到default主題目;
A的設置 <httpModules>
????????? <add name="SiteCache" type="SiteCache"/>
??????? </httpModules> B的設置(不用的項,清除) <httpModules>
???? <clear/>
</httpModules> 如果A.B都用到 <appSettings>
? <add key="app" value="" />
</appSettings> B運行時會提示app已經加載,此時可以 <appSettings>
? <remove name="app" />
? <add key="app" value="" />
</appSettings> 或者: <appSettings>
? <clear />
? <add key="app" value="" />
</appSettings>
三、禁止web.config重寫
同上面的例子、如果B中的config設置必須與A中的相同,不能重寫,則A的config設置 ??? <location path="B" allowOverride="false">
????? <system.web>
??????? <httpModules>
????????? <add name="SiteCache" type="SiteCache"/>
??????? </httpModules>
????? </system.web>
? </location> 此時B的config中<httpModules>設置不能改寫,須和A的設置相同。
轉載于:https://www.cnblogs.com/dongqi/archive/2010/11/01/1866001.html
總結
以上是生活随笔為你收集整理的虚拟目录继承根Web.Config的问题解决(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成随机端口函数
- 下一篇: jquery总结_代码收藏