asp.net mvc:如何将非wwwredirect到www,反之亦然

我想将所有wwwstream量redirect到非wwwstream量

我已经复制到我的web.config

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

每个这个职位

如何将“www”URLredirect到没有“www”URL或反之亦然?

但我有500内部服务器错误。

你可能会考虑一个不同的方法:

 protected void Application_BeginRequest (object sender, EventArgs e) { if (!Request.Url.Host.StartsWith ("www") && !Request.Url.IsLoopback) { UriBuilder builder = new UriBuilder (Request.Url); builder.Host = "www." + Request.Url.Host; Response.Redirect (builder.ToString (), true); } } 

这将做302redirect,所以build议一点点调整:

 protected void Application_BeginRequest (object sender, EventArgs e) { if (!Request.Url.Host.StartsWith ("www") && !Request.Url.IsLoopback) { UriBuilder builder = new UriBuilder (Request.Url); builder.Host = "www." + Request.Url.Host; Response.StatusCode = 301; Response.AddHeader ("Location", builder.ToString ()); Response.End (); } } 

这个将会返回301永久移动。

如果你直接复制它,那么你的web.config中有不正确的标记

你需要

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

这条线说

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

是说你需要把你的web.Config在该位置的configuration。
<system.webServer>是你的web.Config文件的configSections之一。

编辑:

确保您首先安装了用于IIS7的URL重写模块

上面的页面谈到了将HTTPredirect到HTTPS,但这个概念仍然适用于WWW到非WWW

另外,这里有一些关于如何结合在一起的详细信息 。

  **For a www to a non www Thanks @developerart** protected void Application_BeginRequest(object sender, EventArgs e) { if (Request.Url.Host.StartsWith("www") && !Request.Url.IsLoopback) { UriBuilder builder = new UriBuilder(Request.Url); builder.Host = Request.Url.Host.Replace("www.",""); Response.StatusCode = 301; Response.AddHeader("Location", builder.ToString()); Response.End(); } } 
 protected void Application_BeginRequest(object sender, EventArgs e) { if (!this.Request.Url.Host.StartsWith("www") && !this.Request.Url.IsLoopback) { var url = new UriBuilder(this.Request.Url); url.Host = "www." + this.Request.Url.Host; this.Response.RedirectPermanent(url.ToString(), endResponse: true); } } 

build立在用户151323答案,这里的Azure用户谁也想阻止用户访问从azurewebsites.net子域(这进入你的Global.asax内的主类( MvcApplication for MVC用户))的网站的完整答案):

  protected void Application_BeginRequest(object sender, EventArgs e) { if (Request.Url.Host.StartsWith("YourSite.azurewebsites") && !Request.Url.IsLoopback) { Response.StatusCode = 301; Response.AddHeader("Location", "www.YourSite.com"); Response.End(); return; } if (!Request.Url.Host.StartsWith("www") && !Request.Url.IsLoopback) { UriBuilder builder = new UriBuilder(Request.Url); builder.Host = "www." + Request.Url.Host; Response.StatusCode = 301; Response.AddHeader("Location", builder.ToString()); Response.End(); } } 

我知道这个线程是古老的,似乎是应对死亡。 但是,将每个人的global.asaxbuild议都包括在内,以检查你是否在本地工作,这可能是有用的。 在使用IIS Express进行开发的过程中,您的站点不会尝试redirect到“www”子域。

某事沿着:

 protected void Application_BeginRequest( object sender, EventArgs e) { if (!Request.IsLocal) { // Do your check for naked domain here and do permanent redirect } }