繁体   English   中英

IIS URL重写和MVC

[英]IIS URL Rewriting and MVC

我的托管计划可使用的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 ,我认为我可以没有波浪号。

我终于找到了解决方案!

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>

现在每个人都很高兴:)

您可以编写自定义的HtmlHelper因此可以使用MyActionLink代替使用ActionLink ,它可以生成所需的url。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM