我想将网址中的IP地址替换为普通域名。简而言之:
Change
http://123.456.789.025/images/2015/a/
Into
http://images.domain.com/images/2015/a/
任何人都知道如何做到这一点?我在SO上找不到它。
谢谢!
答案 0 :(得分:2)
如果没有各种各样的hacky方法,这基本上是不可能的。如果注册了SPF记录,您可以猜测哪个域链接到IP,但这几乎就是它。 IP通常由数百甚至数千个以上的域共享。所以 if 你可以通过查询名称服务器找出哪些域名链接到IP地址,即使这样你就不会知道成千上万的TLD中的哪一个是纠正一个。找出我能想到的唯一方法是使用TLD作为URL 和以IP作为URL抓取页面,并比较输出。但这非常棘手,因为当页面提供动态内容时,输出将(几乎)每个请求都不同。这将迫使您必须为链接到IP的每个域提出请求,直到您获得匹配为止。
当然,如果事先知道ip,只需创建一个数组:
$ip2domain = array(
'123.123.123.123' => 'mydomain.com',
...
);
$url = 'http://'. $ip2domain['123.123.123.123'] .'/images/2015/a/';
编辑我看到您正在编辑,您知道域名等。在这种情况下,只需使用php的原生 parse_url()解构网址功能。要构建网址,请使用 http_build_url() :
$url = 'http://123.456.789.025/images/2015/a/';
$parts = parse_url($url);
$parts['host'] = 'example.com';
$final_url = http_build_url($parts); // http://example.com/images/2015/a
(看看php.net而不是SO,有时会得到回报;))
答案 1 :(得分:0)
如果你知道那里总会有IP(在其他情况下,它会替换查询字符串中的另一个IP):
$url = join($host, preg_split('/\d+\.\d+\.\d+\.\d+/', $url, /*limit*/1))