短网址(Short URL)服务,在微博、微信、QQ空间、短信等应用中十分常见,比如,当我们在腾讯、新浪微博发微博时有时发很长的网址连接,但由于微博限制字数140个字符,所以微博就自动把您发的长网址给转换成短网址了。这样是为了控制更少的字数写更多的内容,网址压缩确实是非常有意义的事情。

百度短网址: http://dwz.cn

新浪短网址: http://sina.lt

谷歌短服务:http://goo.gl

聚合短网址:http://dwz.wailian.work

FT12短网址:http://www.ft12.com

示例演示

短网址:http://t.cn/R39gcwL​

长网址: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' ); 	// 长网址转短网址

 

 

参考推荐

URL短网址生成算法原理

php 加密算法md5, sha1

Python 常用加密算法 base64, md5, sha1

PHP、Python、Java、C#、Javascript 运用AES加密解密