各种云的DNS实现显性转发需要ICP,本来不用服务器就可以302转发的这下操作麻烦了。自己搭建一个DNS服务器,动作太大,且使用可信度不高。灵机一动通过cname和txt记录,实现一下无服务器DNS显性302跳转。
搭建:
1)cname302.com解析到服务器IP,比如:IP.IP.IP.IP
2)建立一个PHP网站,并设置为默认网站(即解析到这个IP的域名都可以访问):
代码内容:
<?php $http_host = $_SERVER['HTTP_HOST']; echo "HTTP Host: ".$http_host."\r\n"; if(substr_count($http_host, '.')==1){ $txt_http_host = "txt_.".$http_host; }else{ $txt_http_host = "txt_".$http_host; } $result = dns_get_record($txt_http_host, DNS_TXT); echo "Result for TXT record ".$txt_http_host ."\r\n"; print_r($result); $target = $result[0]["txt"]; echo "302 Target: ".$target ."\r\n"; echo "Let's go!\r\n"; header('Location: //'.$target, true, 302); ?>
如果有个新域名想实现无服务器跳转,只需要2步骤:
1)添加域名如:www.awk.com,cname解析到cname302.com
2)设置txt记录,txt_www.awk.com,值为要跳转的目标比如www.baidu.com,于是搭配cname302.com上的服务,就可以实现了!
说明:这样就可以实现解析的域名,能被cname302.com的服务器接收到请求。但是,由于没有通信给用户要往哪儿跳转,就很难受。如果通过URL地址传递如http://www.awk.com/goto/www.baidu.com
就显得挫了点,不够优雅。Header传递更别提了,对于大部分用户根本不懂,就算懂的人也没人能接受。
后台可以根据访问的host:www.awk.com,根据约定知道你其实是想往txt_www.awk.com的值上跳转,于是后台根据DNS记录查询一下这个TXT记录,即可帮你302跳转过去!
ubuntu@VM-12-2-ubuntu:~$ curl -v www.awk.com
* Trying 43.155.181.10:80…
* Connected to www.awk.com (43.155.181.10) port 80 (#0)
> GET / HTTP/1.1
> Host: www.awk.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Server: Tengine
< Date: Wed, 20 Sep 2023 06:13:44 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Location: //www.ip.com
<
HTTP Host: www.awk.com
Result for TXT record txt_www.awk.com
Array
(
[0] => Array
(
[host] => txt_www.awk.com
[class] => IN
[ttl] => 600
[type] => TXT
[txt] => www.ip.com
[entries] => Array
(
[0] => www.ip.com
)
)
)
302 Target: www.ip.com
Let’s go!
* Connection #0 to host www.awk.com left intact
补充:
主域名:解析TXT为:txt_