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 } }