2013-07-13 155 views
0

我有一個包含多個.NET網站的網絡服務器。我設置它的方式是,服務器的根目錄包含每個包含其內容的站點的文件夾。然後,我在根目錄中有一個web.config來處理這些URL,並根據他們將要訪問的網站將用戶指向適當的文件夾。URL重寫問題

根目錄:

  • \站點A
  • \ SiteB中
  • \ web.config中

這裏是web.config文件看起來像這樣:

<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <clear /> 
       <rule name="SiteA" enabled="true" stopProcessing="true"> 
        <match url="(.*)" /> 
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
         <add input="{HTTP_HOST}" pattern="^(www\.)?.siteAdomain\.com$" /> 
        </conditions> 
        <action type="Rewrite" url="\SiteA\{R:0}" /> 
       </rule> 
       <rule name="SiteB" enabled="true" stopProcessing="true"> 
        <match url="(.*)" /> 
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
         <add input="{HTTP_HOST}" pattern="^(www\.)?.siteBdomain\.com$" /> 
        </conditions> 
        <action type="Rewrite" url="\SiteB\{R:0}" /> 
       </rule> 
      </rules> 
     </rewrite> 
     <urlCompression doStaticCompression="true" doDynamicCompression="true" /> 
    </system.webServer> 
</configuration> 

SiteA也使用ASP.NET成員身份:

<authentication mode="Forms"> 
    <forms name=".ASPXFORMSAUTH" loginUrl="~/account/login.aspx" /> 
</authentication> 

問題是,當我去SiteA時,身份驗證啓動並且我被重定向到loginUrl。然而,它正在解決相對於根文件夾而不是SiteA文件夾的路徑,該文件夾導致了404。this site在看過之後提到這是一個用.NET 3.5 SP1修補的錯誤。但是,我的託管服務位於運行IIS 8.0的.NET 4.X上,所以我認爲我應該清楚這一點。

我在這裏錯過了簡單的東西嗎?

+0

你試過了嗎:LoginURL =「〜/ SiteA/account/login.aspx」或者在SiteA文件夾中放置一個新的Web.Config和Authentication信息。 ? –

回答

0

我可以諮詢下面的網站後,來解決這個問題:

http://weblogs.asp.net/owscott/archive/2010/01/26/iis-url-rewrite-hosting-multiple-domains-under-one-site.aspx

基本上,訣竅是要重寫只是尚未有站點名稱在URL中的子文件夾中的網址:

<rule name="SiteA" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
      <add input="{HTTP_HOST}" pattern="^(www\.)?.siteAdomain\.com$" /> 
     <add input="{PATH_INFO}" pattern="^/SiteA/" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="\SiteA\{R:0}" /> 
</rule> 
<rule name="SiteB" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
      <add input="{HTTP_HOST}" pattern="^(www\.)?.siteBdomain\.com$" /> 
     <add input="{PATH_INFO}" pattern="^/SiteB/" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="\SiteB\{R:0}" /> 
</rule>