2013-10-04 152 views
0

我的托管计划的Web应用程序数量有限,但无限制的子域名。我打算使用IIS重写,像下面利用这些子域名:IIS URL重写和MVC

<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部署,我相信主机是IIS7。

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

那么我最终是当我去原地址工作的网站:

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

而且一个网站,加载,但不能正常运行,在重定向的地址:

http://home.mydomain.com/application

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

/home/application/Account/Login

这适用于链接到其他网页/路线,捆绑,基本上任何地方~/@Html.ActionLink使用。

我该如何解决这个问题?我希望至少保持@Html.ActionLink的使用,我想我可以没有痣。

回答

0

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

+0

我正在寻找一个更通用的解决方案,从而使该网站将发挥作用正确无论我查看哪个网址: 'http:// home.mydomain.com/application' 和 'http:// www.mydomain.com/home/application' 应该都可以工作。 – Eraph

+0

所有编写自定义的'HtlmHelper'都会改变'MyActionLink'生成的html,它不会改变你的代码的工作方式。 – edhedges

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> 

现在大家都很开心:)

+0

好的,打电话给我变幻莫测,但我会把它当作潜在的最终解决方案。链接仍然以'/ home /'开头,所以我最终得到的结果是: 'http:// home.mydomain.com/home/application' 它_does_工作,但它不是一个URL我很高兴。 – Eraph