似乎使用 .NET MVC 中内置的友好路由库,它可以让我们做这样的事情。
如果我想要使用 .NET MVC 中的内置内容并不明显,我希望使用 MVC 框架自动将一个以 www 开头的 url 重定向到非 www url。
似乎使用 .NET MVC 中内置的友好路由库,它可以让我们做这样的事情。
如果我想要使用 .NET MVC 中的内置内容并不明显,我希望使用 MVC 框架自动将一个以 www 开头的 url 重定向到非 www url。
您可以使用IIS 7 URL 重写模块
您可以从 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();
}
}
但请记住@Sam 所说的内容,请在此处查看更多信息。
<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>
制作一个正则表达式模式以匹配您的主机并用于{C:0}
1, 2, ..., N
获取匹配的组。
从 www 到非 www 的 301 重定向有多种方法。我更喜欢在某些项目中将这种重定向逻辑保留在 ASP.NET 级别(即在我的应用程序中),但其他项目则需要性能更好的东西,例如 IIS7 url 重写。
它在 ASP.NET 论坛上进行了讨论,我选择在每个控制器上使用 WwwFilter。这对我有用,没有问题。
尝试将其添加到您的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"));
}
它工作并经过测试。