2009-09-25 53 views
5

我有一個寫在ASP.NET MVC(V 1.0)上的應用程序。該應用程序在IIS7上運行,DNS由GoDaddy提供。轉發http://mydomain.com/ctrlr/act/val到http://WWW.mydomain.com/ctrlr/act/val

我想轉發來自http://mydomain.com/ctrlr/act/value這種形式的URL的請求:http://WWW.mydomain.com/ctrlr/act/value

基本上,我想WWW添加到主機名,如果有人試圖達到http://mydomain.com

什麼將是最好的方式來做到這一點?

+0

我認爲這是更多的IIS問題。你應該添加標籤來吸引IIS的注意力 – 2009-09-25 12:11:16

+0

你爲什麼要這麼做? – SLaks 2009-09-25 12:13:33

+0

我不會將此文件作爲答案,因爲這會要求您更改開發堆棧。但這裏是我如何使用Apache解決了我的博客的這個同樣的問題:http://pastie.org/630298。唯一的區別是我預先登記了博客而不是www。還請注意,在我的情況下,同一臺服務器的答案都是域名(不知道這是你的情況)。 – 2009-09-25 12:21:35

回答

11

我想你會發現,從這個question

適合我要和你強制使用過的www同意這一觀點,就好像於是決定use it我相信他們後悔調整餅乾的性能,當一個答案必須使用sstatic.net而不是images.stackoverflow.com說。

爲了節省您的重定向,這裏是您需要做的事情的要點。

以下是IIS7規則,將WWW前綴添加到所有傳入的URL。將此XML片段剪切並粘貼到您的web.config文件中

<system.webServer>/<rewrite>/<rules> 


<rule name="Add WWW prefix" > 
<match url="(.*)" ignoreCase="true" /> 
<conditions> 
<add input="{HTTP_HOST}" pattern="^domain\.com" /> 
</conditions> 
<action type="Redirect" url="http://www.domain.com/{R:1}" 
    redirectType="Permanent" /> 
</rule> 
+0

簡單直接的解決方案。謝謝@dove – 2012-12-13 17:25:44

+0

我不認爲'ignoreCase'是你的正則表達式模式是'。*'的原因。 – 2016-04-02 14:38:42

1

您可以使用Code Plex中的Url Rewriter

RewriteCond %{HTTP_HOST} !^(www).*$ [NC] 
RewriteRule ^(.*)$ http://www.%1$1 [R=301] 

或者,如果你想讓它爲您的域名

RewriteCond %{HTTP_HOST} !^www.mydomain.com$ [NC] 
RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301] 

更具體這也支持了一大堆其他重寫的:你可以通過執行以下強制所有內容www.domain.com函數由mod_rewrite提供。

0

就回答了這個在單獨的線程,但我會重新發布

我選擇在應用層面做到這一點,而不是IIS。這裏有一個我寫的快速操作過濾器來完成這個操作。只需將該類添加到項目的某個位置,然後就可以將[RequiresWwww]添加到單個操作或整個控制器中。

public class RequiresWww : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      HttpRequestBase req = filterContext.HttpContext.Request; 
      HttpResponseBase res = filterContext.HttpContext.Response; 

      //IsLocal and IsLoopback i'm not too sure on the differences here, but I have both to eliminate local dev conditions. 
      if (!req.IsLocal && !req.Url.Host.StartsWith("www") && !req.Url.IsLoopback) 
      { 
       var builder = new UriBuilder(req.Url) 
       { 
        Host = "www." + req.Url.Host 
       }; 

       res.Redirect(builder.Uri.ToString()); 

      } 

      base.OnActionExecuting(filterContext); 
     } 
    } 

然後

[RequiresWwww] 
public ActionResult AGreatAction() 
{ 
... 
} 

[RequiresWwww] 
public class HomeController : BaseAppController 
{ 
.. 
.. 
} 

希望幫助別人。乾杯!