【问题标题】:IIS URL Rewriting and MVCIIS URL 重写和 MVC
【发布时间】:2013-10-04 14:40:38
【问题描述】:

我的托管计划使用的 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,我想我可以不用波浪号。

【问题讨论】:

    标签: asp.net asp.net-mvc iis web-config


    【解决方案1】:

    我终于找到了解决办法!

    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>
    

    现在大家都很开心:)

    【讨论】:

    • 好吧,说我善变,但我将放弃它作为潜在的最终解决方案。链接仍然以 /home/ 开头,所以我最终得到的是:http://home.mydomain.com/home/application确实有效,但它不是我满意的 URL。
    【解决方案2】:

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

    【讨论】:

    • 我正在寻找一个更通用的解决方案,以便无论我从哪个 URL 查看它,该网站都能正常运行:http://home.mydomain.com/applicationhttp://www.mydomain.com/home/application 应该都可以工作。
    • 所有编写自定义 HtlmHelper 都会改变由 MyActionLink 生成的 html,但不会改变代码的工作方式。
    猜你喜欢
    • 2019-10-26
    • 2012-07-03
    • 2015-09-25
    • 2011-05-23
    • 2018-12-06
    • 1970-01-01
    • 2011-02-12
    • 2018-07-25
    • 2013-07-01
    相关资源
    最近更新 更多