如何讓虛擬目錄裏面的webconfig不繼承網站的設置

今天要部署一個網站和一個和網站相關的webservices接口,我把網站部署後,就把WEB接口作爲它下面的一個虛擬目錄來處理了,這樣他們可以共享一個域名.他們各個都有一個webconfig配置文件,部署後發現網站正常,可是WEB接口卻報錯,說配置文件出了問題,仔細檢查發現WEB接口用的是網站的配置文件,一下子沒招了.

後來在網上一查,發現利用配置文件的配置節可以讓它不繼承父目錄的配置文件,如下

<location path="." allowOverride="false" inheritInChildApplications="false"> </location>

把它加在父目錄的<system.web>節外面即可,測試一下果然如此,甚喜,雖記之以備忘,同時也於大夥共享!

下面是更好的一個:

虛擬目錄中的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 指是否被子級應用程序繼承
一、應用身份驗證、但個別目錄或文件不需要身份驗證 最常見的是一個網站的後臺需要驗證,而前臺是不需要的;一般登錄頁面會有驗證碼、而生成驗證碼那個頁面是不需要驗證的、否則驗證圖片是顯示不出來的。解決方法:
<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沒有這些設置,項目也沒用到這些設置,但B的程序在運行時確會出錯、原因就是它繼承A的config;這個讓人有點討厭“我壓根沒用它、怎麼會有錯?且提示出錯的那個文件是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的設置相同。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章