我有以下代码将我网站的“非www”版本的所有请求重定向到“www”版本,重定向正在运行。我已相应更新了Google网站站长工具中的设置。我从existing SO question获得了此代码。
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Url.Authority.StartsWith("www"))
return;
var url = string.Format("{0}://www.{1}{2}",
Request.Url.Scheme,
Request.Url.Authority,
Request.Url.PathAndQuery);
Response.RedirectPermanent(url, true);
}
如何更改此代码以满足从“www”到“非www”版本的需求?令我困惑的是,所有网站都以“http://”开头。其次,如果我将网站迁移到“https://”,我该怎么做?规范链接是否会解决这个问题,还是我必须再次更改上面的代码?
答案 0 :(得分:1)
我如何更改此代码以迎合来自" www"到"非www"版本
void Application_BeginRequest(object sender, EventArgs e)
{
if (!Request.Url.Authority.StartsWith("www"))
return;
var url = string.Format("{0}://{1}{2}",
Request.Url.Scheme,
Request.Url.Authority,
Request.Url.PathAndQuery);
Response.RedirectPermanent(url, true);
}
其次,如果我将网站迁移到" https://&#34 ;?,我将如何执行此操作?规范链接是否会解决这个问题,还是我必须再次更改上面的代码?
Request.Url.Scheme
(即http
或https
)正在从当前请求传递,因此无法处理该详细信息。
MVC有RequireHttps
attribute可以注册为全局过滤器来处理该重定向。或者,如果不能满足您的需求,您可以make a custom one。
Canonical tag适用于多个网址上有重复内容的情况。 301重定向避免了这种情况,因此在这种情况下不需要。
注意:
大多数浏览器都会缓存301重定向。因此,如果您在没有向响应添加
所有浏览器都不支持301重定向(尽管据我所知,所有浏览器都很尊重它们)。请参阅this answer,了解如何为浏览器无法登陆的不幸用户设置用户友好的301重定向。no-cache
标头的情况下进行此设置,则任何已达到当前配置的浏览器都将忽略新配置。从本质上讲,除非你找到某种方法来缓存这种情况,否则这些不幸的用户将处于无限重定向循环中。