URL短网址生成的简单示例
短网址(Short URL)服务,在微博、微信、QQ空间、短信等应用中十分常见,比如,当我们在腾讯、新浪微博发微博时有时发很长的网址连接,但由于微博限制字数140个字符,所以微博就自动把您发的长网址给转换成短网址了。这样是为了控制更少的字数写更多的内容,网址压缩确实是非常有意义的事情。
百度短网址: http://dwz.cn
新浪短网址: http://sina.lt
谷歌短服务:http://goo.gl
聚合短网址:http://dwz.wailian.work
FT12短网址:http://www.ft12.com
示例演示:
长网址:https://blog.mimvp.com/article/25424.html
URL短网址生成的简单示例
LAMP 环境测试成功通过,详细步骤如下
1、post.html 页面
首先是post.html页面,用ajax请求返回短网址
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Short URL DEMO from mimvp.com</title> </head> <script src="https://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script> <script> $(document).ready(function(){ $("button").click(function(){ var text = $("#text").val(); $.ajax({ url : "shortUrl.php", type : 'post', data : {'text':text}, success : function(data){ $("#url").val(data); } }) }); }) </script> <body> 长网址: <input type="text" name="url" id="text" size="50"> <button type="button" >提交</button><br/> 短网址: <input type="text" id="url" val="" size="50"> </body> </html>
2、shortUrl.php 页面
把原网址和随机生成的8位码存入数据库,形成关联
# 接受post.html页面提交过来的数据 $url = $_POST['text']; // post.html提交过来的url # 生成随机8位码 $txt = 'Z1X2C3V4B5N6M7A8S9D0FGHJKLQWERTYUIOP'; $code = ''; for ($i = 0; $i < 8; $i++) { $code .= $txt[mt_rand(0, 35)]; } # 把前端提交过来的原网址($url)和随机生成的8位码($str)一起存入数据库,目的为了到时候取的时候关联获取原网址 $con = new mysqli('localhost','root','root','shorturl'); $sql = "insert into `short_url` (url,code) VALUES ('$url','$code')";//插入数据库 $result = mysqli_query($con,$sql);
代码注释:
接下来拼接成短网址,然后返回前端页面
第一步:这是没有处理的网址如下(方便理解),后面进行伪静态和虚拟主机配置,就可以很简短
'localhost/shorturl/getUrl.php'这个是当输入短网址后,就可以到getUrl.php页面进行处理并重定向操作
echo 'http://localhost/shorturl/getUrl.php/'.$code; // 这里是还没有处理的短网址,拼接$code目的是后面从浏览器地址获取进行数据库匹配
第二步:接下来就是如何把上面的短网址处理成自己想要的真正短网址
1.找到你的apache下面 conf/httpd.conf文件,把LoadModule rewrite_module modules/mod_rewrite.so 前面'#'去掉,表示启用重写功能,
并且也要去掉 Include conf/extra/httpd-vhosts.conf 前面 '#',表示启用虚拟主机配置
2、在你的文件根目录(也就是wamp/www/文件夹/)下,新建文件 .htaccess (注意文件名前面有 . )
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ getUrl.php/$1 [QSA,PT,L] </IfModule>
RewriteRule ^(.*)$ getUrl.php/$1 [QSA,PT,L] 中 getUrl.php 表示要隐藏的文件名
第三步:在apache下的 conf/extra/httpd-vhosts.conf 加入
<VirtualHost *:80> DocumentRoot "/var/html/www/shorturl/" ServerName sgw.me </VirtualHost>
DocumentRoot 你的文件目录,ServerName 你的短网址(随意),配置好要重启apache才能生效
第四步:把你的 /etc/hosts 文件添加(要和你上面的ServerName保持一致,apache才能读取到)
127.0.0.1 mimvp.com
现在可以把上面“第一步”的 echo 'http://localhost/shorturl/getUrl.php/'.$code 换成
echo 'https://mimvp.com/'.$code; // 这个就是真正短网址,例如:http://mimvp.com/WNL740SY
3、getUrl.php 页面
当前端获取生成的短网址之后,这里获取短网址附带的8位随机码进行数据库查询原网址,然后重定向
# 获取短网址的后8位随机码 $get_url = ''; if (isset($_SERVER['PATH_INFO'])) { $get_url = $_SERVER['PATH_INFO']; }else if (isset($_SERVER['REDIRECT_PATH_INFO'])) { $get_url = $_SERVER['REDIRECT_PATH_INFO']; }else if (isset($_SERVER['REDIRECT_URL'])) { $get_url = $_SERVER['REDIRECT_URL']; } #处理字符,因含有 '/' $get_url = ltrim($get_url,'/');//获得url地址栏额外参数 #得到额外参数,进行判断 if(isset($get_url) && !empty($get_url)){//针对 0 null '' 都是empty $con = new mysqli('localhost','root','root','shorturl'); $sql = "select url from 'short_url' where code='$get_url'"; $result = mysqli_query($con,$sql); #关联数组(重定向) if($row=mysqli_fetch_assoc($result)) { $real_url = $row['url']; header('Location: ' . $real_url);//这里根据8位随机码对应取出原网址,就是重定向 }else { header('HTTP/1.0 404 Not Found'); echo 'Unknown link.'; } }else{ header('HTTP/1.0 404 Not Found'); echo 'Unknown link.'; }
短网址接口API
百度短网址(dwz.cn)服务,用户可以通过访问百度短网址首页输入原网址,生成对应的短网址,还可使用百度短网址API开发的各种应用,调用百度短网址服务。
此外,百度短网址提供“还原网址”服务,用户看到一个已生成的短网址,想知道原来的网址是什么,可在“还原网址”页面输入短网址进行还原。
百度生成短网址接口API
/** * [ShortURL_baidu 百度短网址接口] * * @param [integer] $type [非零整数代表长网址转短网址,0表示短网址转长网址] * @param [type] $url [要转的url] * @return [string] [返回转结果] * @author blog.mimvp.com */ function ShortURL_baidu($type, $url) { if ($type) { $baseurl = 'http://dwz.cn/create.php'; } else { $baseurl = 'http://dwz.cn/query.php'; } $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $baseurl ); curl_setopt ( $ch, CURLOPT_POST, true ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); if ($type) { $data = array ( 'url' => $url ); } else { $data = array ( 'tinyurl' => $url ); } curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); $strRes = curl_exec ( $ch ); curl_close ( $ch ); $arrResponse = json_decode ( $strRes, true ); if ($arrResponse ['status'] != 0) { echo 'ErrorCode: [' . $arrResponse ['status'] . '] ErrorMsg: [' . iconv ( 'UTF-8', 'GBK', $arrResponse ['err_msg'] ) . "]"; return 0; } if ($type) { return $arrResponse ['tinyurl']; } else { return $arrResponse ['longurl']; } } echo ShortURL_baidu ( 0, 'http://dwz.cn/U9rzM8J' ); // 短网址转长网址 echo ShortURL_baidu ( 1, 'https://blog.mimvp.com/article/25424.html' ); // 长网址转短网址
新浪生成短网址接口API
/** * [ShortURL_sina sina短网址转换] * @param [integer] $type [非零整数代表长网址转短网址,0表示短网址转长网址] * @param [string] $url [url] * @return [string] [转换结果] * @author mimvp.com */ function ShortURL_sina($type, $url) { /* 填写自己申请key */ $key = ''; if ($type) { $baseurl = 'http://api.t.sina.com.cn/short_url/shorten.json?source=' . $key . '&url_long=' . $url; } else { $baseurl = 'http://api.t.sina.com.cn/short_url/expand.json?source=' . $key . '&url_short=' . $url; } $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $baseurl ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 15 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); $strRes = curl_exec ( $ch ); curl_close ( $ch ); $arrResponse = json_decode ( $strRes, true ); if (isset ( $arrResponse->error ) || ! isset ( $arrResponse [0] ['url_long'] ) || $arrResponse [0] ['url_long'] == '') { return 0; } if ($type) { return $arrResponse [0] ['url_short']; } else { return $arrResponse [0] ['url_long']; } } echo ShortURL_sina ( 0, 'http://t.cn/R39gcwL' ); // 短网址转长网址 echo ShortURL_sina ( 1, 'https://blog.mimvp.com/article/25424.html' ); // 长网址转短网址
参考推荐:
Python 常用加密算法 base64, md5, sha1
PHP、Python、Java、C#、Javascript 运用AES加密解密
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-07-25 05:16:59
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: URL短网址生成的简单示例 (米扑博客)
学习了,感谢博主分享
相互学习 多多互访