0

我有一个托管多个 .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 上,所以我想我应该清楚这一点。

我在这里错过了一些简单的事情吗?

4

1 回答 1

0

在咨询以下站点后,我能够解决此问题:

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

基本上,诀窍是只重写 URL 中没有站点名称子文件夹的 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>
于 2013-07-14T22:44:50.567 回答