删除ASP.NET MVC 1.0中的“WWW”

时间:2010-02-13 03:19:38

标签: asp.net-mvc url

我试图强制域名不使用'www'。如果尝试,我想重定向用户。我在MVC解决方案上看不到什么。无论如何都要利用MVC内置的路由,或者最好的解决方案。

由于

4 个答案:

答案 0 :(得分:4)

实现为ActionFilter,因为它类似MVC,更明确。

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


        var host = req.Uri.Host.ToLower();
        if (host.StartsWith("www.")) {
            var builder = new UriBuilder(req.Url) {
                Host = host.Substring(4);
            };
            res.Redirect(builder.Uri.ToString());
        }
        base.OnActionExecuting(filterContext);
    }
}

将ActionFilter应用于您的控制器或基本控制器类(如果有)。

有关动作过滤器的介绍,请参阅MSDN上的Understanding Action Filters

[RemoveWwwFilterAttribute]
public class MyBaseController : Controller

答案 1 :(得分:3)

虽然我认为John Gietzen's答案是最优雅的解决方案,但我无法对共享托管环境实施do。决定找到一个非应用程序驱动的解决方案,我发现这个blog post显示了IIS7的一个很好的替代方法。值得庆幸的是,DiscountASP.NET通过IIS管理器工具提供了URL Rewrite模块。

在关于创建重写规则的博客文章之后,域中具有www的任何URL都将执行永久301重定向到非www站点。同时保留完整路径。

感谢大家的投入。

答案 2 :(得分:2)

这是更通用的配置,因为您可以在根目录的URL重写中编写一次(不是特定于某个应用程序池),它将自动应用于所有IIS网站,而不依赖于您的域名。

IIS Remove WWW

答案 3 :(得分:1)

如果您可以控制服务器,则应设置一个接受“www.domain.com”请求的虚拟目录,并将其永久重定向(301)为“domain.com”

虽然ASP.NET MVC中可能可能,但这样做的重定向不是ASP的工作。

在IIS上: Virtual Directory http://img138.imageshack.us/img138/4213/virtualdirectories.png

关于Apache:

<VirtualHost *:80>
    ServerName www.domain.com
    Redirect permanent / http://domain.com/
</VirtualHost>

IIS和Apache设置都将保留URL主干。