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短网址生成的简单示例 (米扑博客)
学习了,感谢博主分享
相互学习 多多互访