Mat*_*att 13 php redirect url-shortener canonical-link
在链接缩短程序和Ajax的时代,可能有许多链接最终指向相同的内容.我想知道什么是最好的方法来获得PHP的网站的最终,最好的链接,希望有一个库.我无法在Google或GitHub上找到任何内容.
我已经看过这个示例代码,但它不处理像rel ="canonical"元标记或默认ssl端口之类的东西:http://w-shadow.com/blog/2008/07/05/how-to-得到重定向的URL功能于PHP /
Facebook似乎很好地处理了这个问题,你可以看到他们如何遵循301和rel ="canonical"等.要查看Facebook处理它的方式示例,请使用他们的Open Graph工具:
https://developers.facebook.com/tools/debug
并输入以下链接:
http://dlvr.it/xxb0W
https://twitter.com/#!/twitter/statuses/136946408275193856
是否有一个已经预先构建的PHP库,它将检查这些头,解析301重定向,解析rel ="canonical",检测重定向循环并正确抓取最佳结果URL使用?
作为替代方案,我对可以使用的API持开放态度,但更喜欢在我自己的服务器上运行的东西.
Mat*_*att 12
由于我无法找到真正做到我想要的任何库,而且我希望做的不仅仅是关注HTTP重定向,我已经继续创建了一个库来完成目标并在MIT下发布它执照.你可以在这里得到它:
https://github.com/mattwright/URLResolver.php
URLResolver.php是一个PHP类,它尝试将URL解析为最终的规范链接:
我当然不是HTTP重定向规则的专家,所以如果有人有关于如何改进这个库的建议,我将不胜感激.我已经测试了数以千计的URL,它似乎做得很好.我按照Mario的建议,在需要的地方使用了PHP Simple HTML Parser库.
我给你写了一个小函数来做到这一点。这很简单,但它可能是您的起点。注意:http://dlvr.it/xxb0W url 返回其 Location 响应标头的无效 URL。
您需要 Altumo PHP 库才能使其工作。这是我写的一个库,但它是 MIT 许可证,这个函数也是如此。
请参阅: https: //github.com/homer6/altumo
另外,您必须将函数包装在 try/catch 中。
/**
* Gets the final URL of a URL that will be redirected.
*
* @param string $url_string
* @throws \Exception //on error
* @return string
*/
function get_final_url( $url_string ){
while( 1 ){
//validate URL
$url = new \Altumo\String\Url( $url_string );
//get the Location response header of the URL
$client = new \Altumo\Http\OutgoingHttpRequest( $url_string );
$response = $client->sendAndGetResponseMessage();
$location = $response->getHeader( 'Location' );
//return the URL if no Location header was found, else continue
if( is_null($location) ){
return $url_string;
}else{
$url_string = $location;
}
}
}
echo get_final_url( 'your url here' );
Run Code Online (Sandbox Code Playgroud)
如果您需要进一步修改或帮助实现它,请告诉我。