在ASP.NET MVC 1.0中删除'WWW'
我试图强制域名不使用'www'。我想要尝试重定向用户。我很少看到MVC解决方案。无论如何要利用MVC内置的路由,或者最好的解决方案是什么。在ASP.NET MVC 1.0中删除'WWW'
感谢
如果你有对服务器的控制,你应该建立一个接受请求“www.domain.com”,并永久重定向(301)的虚拟目录他们“domain.com”
虽然这可能是可能在ASP.NET MVC,这不是ASP的工作做这种重定向。
在IIS: Virtual Directory http://img138.imageshack.us/img138/4213/virtualdirectories.png
在阿帕奇:
<VirtualHost *:80>
ServerName www.domain.com
Redirect permanent/http://domain.com/
</VirtualHost>
无论是IIS和Apache设置将保留URL干。
你可以做到这一点,同时保留用户的网址。我想透明地将www放到用户,而不是将他们踢回根。 – 2010-02-13 03:32:43
@durilai:如果您使用刚才添加的屏幕快照中的设置,您将获得完全相同的效果。这是我如何配置我的服务器。例如,尝试去http://www.lanlordz.com/Forums/ – 2010-02-13 03:40:15
我使用discountasp.net,而他们允许连接到IIS管理器我无法修改此。我更喜欢这种方法,但不认为这是可能的共享主机。有什么想法吗? – 2010-02-13 03:52:29
作为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应用于您的控制器或基础控制器类(如果有的话)。
有关Action Filters的介绍,请参见MSDN上的Understanding Action Filters。
[RemoveWwwFilterAttribute]
public class MyBaseController : Controller
这将修改所有请求,包括脚本和样式表文件,是否有办法捕获视图。 – 2010-02-13 03:37:26
为什么你不使用'UriBuilder'来实现这个功能,并使用Request.Url? – 2010-02-13 03:49:28
@John同意,这是一个更好的方法。 – 2010-02-13 04:16:42
尽管我相信John Gietzen's答案是最优雅的解决方案,但我无法实现共享主机环境。确定找到一个非应用程序驱动的解决方案,我发现这blog post显示IIS7的一个很好的替代方法。谢天谢地,DiscountASP.NET的URL Rewrite模块通过IIS管理器工具提供。
关于创建重写规则的博客文章之后,域中的www任何URL都将永久301重定向到非www网站。同时保留完整路径。
感谢大家的意见。
这是更通用的配置,因为您可以在URL中写入一次重写根IIS(并非特定于某个应用程序池),它将自动应用于所有IIS网站,而不依赖于您的域名。
您在Apache,IIS 6或IIS 7上吗? – 2010-02-13 03:43:07
IIS7,请参阅您的帖子上的回复。 – 2010-02-13 04:04:45