0

我的托管计划使用的 Web 应用程序数量有限,但子域不受限制。我计划通过使用 IIS 重写来利用这些子域,如下所示:

<rule name="Home Rewrite" enabled="true">
  <match url="^(.*)$" />
    <conditions>
      <add input="{HTTP_HOST}" pattern="^home\.mydomain\.com$" />
    </conditions>
  <action type="Rewrite" url="home/{R:1}" />
</rule>

这在大多数情况下都很好,我可以去http://home.mydomain.com,它会带我去http://www.mydomain.com/home达到预期的效果。

我正在使用 Web Deploy 发布,我相信主机是 IIS7。

问题是我想利用@Html.ActionLink,但是在查看源代码时,这解决了包含虚拟目录。

所以我最终得到的是一个在我转到原始地址时可以工作的网站:

http://www.mydomain.com/home/application

以及在重定向地址处加载但无法正常运行的站点:

http://home.mydomain.com/application

在页面源中生成的 URL 指向相对于原始地址:

/home/application/Account/Login

这适用于指向其他页面/路线、捆绑包的链接,基本上任何使用~/@Html.ActionLink使用的地方。

我该如何解决这个问题?我希望@Html.ActionLink至少可以继续使用,我想我可以没有波浪号。

4

2 回答 2

2

我终于找到了解决办法!

https://support.gearhost.com/entries/23689272-URL-Rewrite-Subdomain

我的web.config重写规则需要额外的一行:

<rule name="Home Rewrite" enabled="true">
  <match url="^(.*)$" />
    <conditions>
      <add input="{HTTP_HOST}" pattern="^home\.mydomain\.com$" />
      <add input="{PATH_INFO}" pattern="^/home/" negate="true" /> <!-- This one! -->
    </conditions>
  <action type="Rewrite" url="home/{R:1}" />
</rule>

现在每个人都很高兴:)

于 2013-10-04T15:26:23.937 回答
0

您可以编写一个自定义 HtmlHelper,而不是使用ActionLink您可以使用MyActionLink的,它可以生成您需要的 url。

于 2013-10-04T14:47:47.890 回答