4

似乎使用 .NET MVC 中内置的友好路由库,它可以让我们做这样的事情。

如果我想要使用 .NET MVC 中的内置内容并不明显,我希望使用 MVC 框架自动将一个以 www 开头的 url 重定向到非 www url。

4

3 回答 3

8

您可以使用IIS 7 URL 重写模块

您可以从 IIS 进行设置,也可以将其放在web.config以下内容中<system.webServer>

www 到非 www

<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 所说的内容,请在此处查看更多信息


非 www 到 www

<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获取匹配的组。

于 2011-01-29T14:42:47.163 回答
2

从 www 到非 www 的 301 重定向有多种方法。我更喜欢在某些项目中将这种重定向逻辑保留在 ASP.NET 级别(即在我的应用程序中),但其他项目则需要性能更好的东西,例如 IIS7 url 重写。

在 ASP.NET 论坛上进行了讨论,我选择在每个控制器上使用 WwwFilter。这对我有用,没有问题。

于 2008-11-16T07:52:12.303 回答
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"));
    }

它工作并经过测试。

于 2011-05-02T13:50:55.270 回答