将非www用户更正为ASP.Net MVC中的完整www域名

时间:2009-05-21 16:23:25

标签: asp.net-mvc

将未在域名中输入www的网站用户重定向到实际获取www网站的最佳方法是什么。

IE:我转到Google.com,我被重定向到www.Google.com

5 个答案:

答案 0 :(得分:2)

处理此问题的最常见方法是在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做事或使用IIS的mod_rewrite扩展之一的人来说,这是一个mod_rewrite示例:

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

遵循这些关于拥有A记录或CNAME的建议只允许用户从两个域访问该网站,但它会减少您的 Google Juice ,因为您在两个不同的<具有相同的内容< / em>网址。

答案 1 :(得分:2)

如果您使用的是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>

答案 2 :(得分:0)

如果要正确使用它,它应该在http服务器上作为别名完成,而不是在你的代码中... imo。

因此,在没有www的情况下联系服务器时,它应该只是将其重定向到正确的URL。

答案 3 :(得分:0)

不应忽略301重定向。 Shahed khan写了一篇很好的帖子来处理这种情况。 http://dotnetusergroup.com/blogs/shahedkhan/archive/2009/05/18/10229.aspx

答案 4 :(得分:-3)

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