转发http://mydomain.com/ctrlr/act/val到http://WWW.mydomain.com/ctrlr/act/val

时间:2009-09-25 12:05:07

标签: asp.net-mvc iis url-rewriting

我有一个在ASP.NET MVC(V 1.0)上编写的应用程序。该应用程序在IIS7上运行,DNS由GoDaddy提供。

我想将http://mydomain.com/ctrlr/act/value的任何请求转发到此表单的网址:http://WWW.mydomain.com/ctrlr/act/value

基本上,如果有人试图访问http://mydomain.com

,我想将WWW添加到主机名

最好的方法是什么?

3 个答案:

答案 0 :(得分:11)

我认为您会找到适合此question

的答案

我同意你强行使用www的想法,好像SO决定use it我确实相信他们在调整cookie的性能并且不得不使用sstatic.net而不是images.stackoverflow.com时后悔了。说。

为了节省您的重定向,这是您需要做的事情。

这是将WWW前缀添加到所有传入URL的IIS7规则。将此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>

答案 1 :(得分:1)

您可以使用Code Plex中的Url Rewriter。您可以通过执行以下操作强制所有内容到www.domain.com:

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]

这也支持mod_rewrite提供的一大堆其他重写函数。

答案 2 :(得分: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 
{
..
..
}

希望有人帮助。干杯!