问题描述
需求:用户在外网访问一个网站如www.sample1.com,此网址会将请求转发到我指定IP的机子上,这台机子在收到请求后,需要判断此网址,然后重定向到另一个网站如www.sample2.com,最终用户打开的是www.sample2.com这个网站。这样一个简单需求,我尝试过通过域名服务商提供的域名管理功能完成域名转发,但这个功能他们说被政府禁了,完成不了,于是做A记录,将网址 1(www.sample1.com)解析到指定IP的服务器,通过这个服务器再做转发的工作,这就是整个需求的背景。(不知这个背景是否问题:))现在主要想解决服务器端的问题,目前有下面几种解决方案:1:部署APACHE2:用JAVA程序监听80端口,然后在收到请求后,发送另一个网站的网址给用户我现在更倾向于第2种解决方案,但不知道用JAVA的什么包来做,怎么判断来访的域名,然后重定向到另一个网址。如有其它更简单方便的解决方案,也请告知,谢谢! 问题补充:cloverprince 写道
解决方案
用户访问的时候,HTTP头的Host字段是用户想要访问的域名。如果要重定向,向用户返回HTTP 301状态。然后,用HTTP头的Location字段向用户提供新的URL。如果是Servlet,可以用HttpServletRequest.getHeader("Host")得到用户请求的域名。如果等于www.sample1.com,就执行重定向。用HttpServletRequest.getRequestURL()获得请求的URL。不过这个URL不含query部分(问号后面的部分),用getQueryString()获得。然后,用java.net.URI类重新构造这个URL,修改host部分,改成www.sample2.com。得到新的URL后,发给用户就行了。
解决方案二:
用apache可以的,没必要自已写。自已写的话,首先需要解析请求头的host字段,然后把请求报文做转发,还是比较麻烦的,一个比较大的请求,需要转发好几次