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的事,不信去看源代码,至于什么原因,我不告诉你,因为你态度不好。
heimeil
你没发现浏览器打开很多网站自动跳转到www地址吗,进baidu.com会跳到www.baidu.com,我虽然也不知道是为什么要这样,但可以猜测到这是一种规范或者标准什么的