在 .net mvc 中将 www 链接路由到非 www 链接

4

看起来在.NET MVC中使用内置的友好路由库,可以让我们做到这样的事情。

如果不明确我想要在.NET MVC中使用内置工具做什么,我想要通过MVC框架自动将以www开头的网址重定向到非www网址。


2
重要的是要意识到,如果您不使用www(或其他子域),那么所有cookie都将提交给每个子域,您将无法拥有一个无cookie的子域来提供静态内容,从而减少浏览器和服务器之间发送和接收的数据量。这可能会让您以后感到遗憾:http://twitter.com/codinghorror/statuses/1637428313 - Sam Hasler
3
补充@Sam的评论:为了更好地理解,请参考http://www.ravelrumba.com/blog/static-cookieless-domain/。 - BrunoLM
3个回答

8
您可以使用 IIS 7 URL Rewriting模块。您可以从IIS设置它,或者只需将以下内容放置在<system.webServer>下的web.config中:

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

您无需创建新的RedirectController,可以使用HomeControler和routes.MapRoute(“Root”,“Home”,new {controller =“Home”,action =“Home”}). - Berezh

2
有多种方法可以从www重定向到非www的网站。在某些项目中,我更喜欢将这个重定向逻辑保留在ASP.NET层面(即在我的应用程序中),但其他项目需要更好的性能,例如IIS7 URL重写。
在ASP.NET论坛上进行了讨论,我选择在每个控制器上使用WwwFilter。这对我很有效,没有任何问题。

已删除之前的答案,因为这个回答更好地回答了用户的特定问题,即如何以ASP.NET MVC为中心的方式进行URL重定向。而我认为最好在ASP.NET MVC之外处理URL重定向。 - user2189331

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"));
    }

它可以运行并已经测试过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接