将未在域名中输入www的网站用户重定向到实际获取www网站的最佳方法是什么。
IE:我转到Google.com,我被重定向到www.Google.com
答案 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记录)来处理。您可以在代码中处理此问题,但它确实不适合它。