我试图强制域名不使用'www'。如果尝试,我想重定向用户。我在MVC解决方案上看不到什么。无论如何都要利用MVC内置的路由,或者最好的解决方案。
由于
答案 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网站,而不依赖于您的域名。
答案 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主干。