2013-10-04 111 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