从域到 www.domain 的全局 301 重定向

Posted

技术标签:

【中文标题】从域到 www.domain 的全局 301 重定向【英文标题】:Global 301 redirection from domain to www.domain 【发布时间】:2011-01-07 21:22:58 【问题描述】:

我可以使用 Global.asax 的开始请求来重定向所有内容吗,

mydomain.domainwww.mydomain.domain

如果这是真的,我该怎么做?

【问题讨论】:

【参考方案1】:

对 Jan 的回答进行了一些小改动,让它对我有用:

protected void Application_BeginRequest(Object sender, EventArgs e)

    string currentUrl = HttpContext.Current.Request.Url.ToString().ToLower(); 
    if (currentUrl.StartsWith("http://mydomain"))
    
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location", currentUrl.Replace("http://mydomain", "http://www.mydomain"));
        Response.End();
    

更改是使用 BeginRequest 事件并将 currentUrl 设置为 HttpContext.Current.Request.Url 而不是 HttpContext.Current.Request.Path。见:

http://www.mycsharpcorner.com/Post.aspx?postID=40

【讨论】:

BeginRequest 发生在 PreRequestHandlerExecute 之前还是之后?【参考方案2】:
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)

  string currentUrl = HttpContext.Current.Request.Path.ToLower();
  if(currentUrl.StartsWith("http://mydomain"))
  
    Response.Status = "301 Moved Permanently";
    Response.AddHeader("Location", currentUrl.Replace("http://mydomain", "http://www.mydomain"));
    Response.End();
  

【讨论】:

您好,我发现 global.asax 中不存在 PreRequest 处理程序,所以我按照您的建议添加了它。但是在调试模式下没有触发事件......我在这里做错了什么? PreRequestHandlerExecute 更改为BeginRequest 时是否触发? 是的! BeginRequest 在每个请求中触发 然后把内片移到 BeginRequest 就可以了。 Request.Path 只返回虚拟路径,没有域名。上面的代码不起作用。

以上是关于从域到 www.domain 的全局 301 重定向的主要内容,如果未能解决你的问题,请参考以下文章

301 将 www.domain 重定向到 domain.com

乘客(Ruby on Rails)中的301重定向从根域到www子域?

.htaccess 旧域到新域 301 重定向,但只有域,而不是页面

服务到 301 重定向从 domain.com 到 www.domain.com

301 将 HTTP 重定向到 HTTPS - 非 www 到 www

htaccess 301redirect auf www。