我有一个托管多个 .NET 网站的网络服务器。我设置它的方式是,服务器的根目录包含每个站点的文件夹,其中包含它的内容。然后,我在根目录中有一个 web.config 来处理 URL,并根据用户要访问的站点将用户指向正确的文件夹。
根目录:
- \站点A
- \站点B
- \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 Membership:
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="~/account/login.aspx" />
</authentication>
问题是当我转到 SiteA 时,身份验证启动,我被重定向到 loginUrl。但是,它正在解析相对于根文件夹而不是 SiteA 文件夹的路径,这会导致 404。
在调查之后,这个网站提到这是一个用 .NET 3.5 SP1 修补的错误。但是,我的托管服务在运行 IIS 8.0 的 .NET 4.X 上,所以我想我应该清楚这一点。
我在这里错过了一些简单的事情吗?