代码之家  ›  专栏  ›  技术社区  ›  Slee

在ASP.NET MVC中更正非WWW用户为完整的WWW域名

  •  1
  • Slee  · 技术社区  · 16 年前

    什么是最好的方式重定向网站用户谁没有进入一个域名的www,以实际获得www网站。

    IE:我转到google.com,然后被重定向到www.google.com

    5 回复  |  直到 15 年前
        1
  •  2
  •   Astra    16 年前

    最常见的处理方法是在url不是您所期望的时执行重定向。通常这是使用某种mod_rewrite模块完成的。

    在ASP.NET MVC中,您必须在请求生命周期中尽早捕获传入的请求,检查URL,然后根据需要重定向(响应代码301或302)到正确的URL。

    我在这篇博文中找到了示例代码: Canonical urls With ASP.NET MVC . 它展示了实现这一点的一种方法:

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        if (Request.Url.Authority.StartsWith("www"))
            return;
    
        string url = (Request.Url.Scheme
           + "://www."
           + HttpContext.Current.Request.Url.Authority
           + HttpContext.Current.Request.Url.AbsolutePath
        );
    
        Response.Clear();
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location", url);
        Response.End();
    }
    

    对于那些使用mono和apache或使用mod_rewrite扩展到iis的人,下面是mod_rewrite示例:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]
    

    遵循这些关于A记录或CNAME的建议只允许人们从两个域访问站点,但这会减少 Google果汁 因为你在两点有相同的内容 不同的 网址。

        2
  •  2
  •   mjallday    15 年前

    如果使用的是Microsoft IIS URL重写模块,则web.config中的以下条目将保持域的一致性。

    <rewrite>
                <rules>
                    <rule name="Consistent Domain" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions>
                            <add input="{HTTP_HOST}" pattern="^mediapopinc.com$" />
                        </conditions>
                        <action type="Redirect" redirectType="Permanent" url="http://www.mediapopinc.com/{R:1}" />
                    </rule>
                </rules>
            </rewrite>
    
        3
  •  0
  •   northpole    16 年前

    如果要正确地传递它,它应该作为http服务器上的别名来完成,而不是在您的代码中…imo。

    因此,当服务器在没有www的情况下被连接时,它应该将其重定向到正确的url。

        4
  •  0
  •   Rahatur    16 年前

    不应该忽略301重定向。 沙赫德汗写了一篇很好的文章来处理这种情况。 http://dotnetusergroup.com/blogs/shahedkhan/archive/2009/05/18/10229.aspx

        5
  •  -3
  •   Andrew Hare    16 年前

    这最好通过管理域的DNS服务器上的A记录(或CNAME记录)来处理。你可以在代码中处理这个问题,但它确实不是合适的地方。