似乎.NET MVC中内置的友好路由库,它可以让我们做这样的事情。
如果我对.NET MVC内置内容的要求不明显,我想用www开头的url自动重定向到使用MVC框架的非www url。
答案 0 :(得分:8)
您可以使用IIS 7 URL Rewriting module
您可以从IIS进行设置,也可以将web.config
放在<system.webServer>
下的<rewrite>
<rules>
<rule name="Canonical" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www[.](.+)" />
</conditions>
<action type="Redirect" url="http://{C:1}/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
下:
global.asax.cs
或者,您可以在protected void Application_BeginRequest(object sender, EventArgs ev)
{
if (Request.Url.Host.StartsWith("www", StringComparison.InvariantCultureIgnoreCase))
{
Response.Clear();
Response.AddHeader("Location",
String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host.Substring(4), Request.Url.PathAndQuery)
);
Response.StatusCode = 301;
Response.End();
}
}
上进行此重定向:
<rewrite>
<rules>
<rule name="Canonical" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^([a-z]+[.]net)$" />
</conditions>
<action type="Redirect" url="http://www.{C:0}/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
但请记住@Sam所说的look here for more info。
{C:0}
制作与您的主机匹配的正则表达式模式,并使用1, 2, ..., N
{{1}}来获取匹配的组。
答案 1 :(得分:2)
有许多方法可以将www重定向从www重定向到非www。我更喜欢在某些项目中将此重定向逻辑保留在ASP.NET级别(即在我的应用程序中),但其他项目需要更好的性能,例如IIS7 URL重写。
它是discussed on the ASP.NET forums,我选择在每个控制器上使用WwwFilter。这对我有用,没问题。
答案 2 :(得分:0)
尝试将此添加到 Global.asax 中:
if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://YourSite.com"))
{
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://YourSite.com","http://www.YourSite.com"));
}
它的工作和测试。