http.Redirect重定向循环bug

目的:如果域名带www则301到不带www的域名。

问题:重定向循环。

猜测:似乎是WriteHeader中修改Location后的域名加上了www。

bug概述:就是想输出个http头(Location: http://yourdomain.com),golang画蛇添足成(Location: http://www.yourdomain.com)。

如下两个代码效果是一样的

//代码一:
    if 0 == strings.Index(req.Host,"www") {
            url := "http://yourdomain.com" + req.RequestURI
            res.Header().Set("Location",url)
            fmt.Println(url)//这里还是:http://yourdomain.com
            res.WriteHeader(http.StatusMovedPermanently) 
                    //到浏览器就变成(Location: http://www.yourdomain.com)
            res.Write(nil)
            return
        }

//代码二:
    if 0 == strings.Index(req.Host,"www") {
            url := "http://yourdomain.com" + req.RequestURI
            fmt.Println(url)//这里还是:http://yourdomain.com
                http.Redirect(res,req,url,http.StatusMovedPermanently)
            //到浏览器就变成:(Location: http://www.yourdomain.com)
                return
    }

===============================================================

在github得了答案,分享出来,惠及后人。

原因是

前端apache,串改了location。

===============================================================

共 2 个回复


JM_Joy

可以很明确地告诉你,这不关golang的事,不信去看源代码,至于什么原因,我不告诉你,因为你态度不好。

# 0

heimeil

你没发现浏览器打开很多网站自动跳转到www地址吗,进baidu.com会跳到www.baidu.com,我虽然也不知道是为什么要这样,但可以猜测到这是一种规范或者标准什么的

# 1