900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 短网址探究 网址探究

短网址探究 网址探究

时间:2024-01-29 19:04:36

相关推荐

短网址探究 网址探究

php教程|php手册

短,网址,探究,短,网址,探究,引言,司空见惯,比如说,下面,这些,http,,CSW6Y,bl

php教程-php手册

短网址探究,网址探究

淘宝客网站源码是什么意思,ubuntu对amd支持,tomcat类加载器结构,lol爬虫辅助,php 去字符,浙江抖音seo算法排名优化lzw

引言

短网址司空见惯,比如说下面这些

mysql多表查询源码,ubuntu中字体设置,tomcat缓冲区大小,开源 图片爬虫,php网页程序,济南口碑营销seo推广多少钱lzw

/CSW6Y => /iforever/p/4313704.html,

现金娱乐网站源码,vscode重装也不行,群辉 ubuntu,tomcat定义apr,sqlite怎么用返回值,python爬虫网络工程师,php 封装调用,宁波seo教程快速推广,qq群拉人网站源码,html网页中嵌入pdf,织梦教育培训手机模板lzw

/CSWuP => /iforever/p/4279006.html ,等等

访问这些网址的时候,前后一对的指向同一个页面,我这里只是在举例子,这些短网址在weibo或者类似的社交网络中经常见到,由于原始链接地址特别长,这个时候短网址就会大显威力,简短好记,但也有他的缺点,比如说短网址不一定直接看出网址中的一些信息(在长网址中是可以看到一些信息的)。

整天接触这个,以至于在还没有真正弄明白他的原理的时候就在思想中烙下了“没什么”的烙印,这就错过了一些知识,这种情况在心理学上应该叫心里暗示吧,有人知道是这样吗?

原理

首先我猜测这个是通过重定向实现的,是一个服务器,用来接收一些短网址,这些短网址是经过处理之后的,在中有该短网址对应的长网址的记录,然后从数据库中获取短网址对应的长网址,然后302重定向。看看具体是不是这样的。

通过浏览器访问/CSW6Y,对请求进行分析(这里使用chrome的调试工具,也可以使用wireshark之类的工具),可以得到下面的数据:

name: abit

version: 1

handle:

– rewrite: if (!-d && !-f && path ~ “/(.*)$”) goto “do.php?url=$1&act=out”

handle:后面的就是rewrite规则,新浪云的具体的详细规则到这里看/doc/php/runtime.html#php-app-config,很简单,nginx、apache的配置也类似。

重定向完成之后还有一个要注意的地方就是在传递参数的时候要进行urlencode,重定向之前要用urldecode。在未使用urlencode的时候传递url类型的参数,在获取的时候可能丢掉部分信息,因此在生成短链接之前传递参数的时候要将url进行escape处理,将特殊字符串进行编码,在访问短链接处理的时候需要对编码的url进行urldecode处理,还原成正常的链接,否则在header跳转的时候不会把该链接当成一个正常的url,跳转之后会把该url附加的之前页面的主机后面类似/,可能会出现错误,因此,这里要特别注意。

sae的在重定向的时候会有一个问题,会将双反斜线自动过滤为一个,例如从/到http://,注意,这里少了个反斜线,这在处理的时候要特别注意,不然可能会遇到不必要的麻烦。

编码

主要的处理部分

<?phpclass snapshotUrl{ //进行编码的数据库,没6位二进制数对应一个字符,一共需要64位,因此选取 //52+10+2个特殊字符 private static $basedb = array( (,),a,,c,d, e,f,g,h,i,j, k,l,m, ,o,p, q, ,s, ,u,v, w,x,y,z,A,B, C,D,E,F,G,H, I,J,K,L,M,N, O,P,Q,R,S,T, U,V,W,X,Y,, ,1,2,3,4,5, 6,7,8,9, ); private function long2short($url){ $hex = md5($url); $out = \; $hex = 0x7FFFFFFF & (1 * (x.substr($hex, 0, 8))); for($i=0; $i>6; } return $out; } public function retJson($arr){ return json_encode($arr); } //对url进行映射保存 public function dispose($url, $act){ $mysql = new SaeMysql(); switch ($act) { case in:$short = $this->long2short($url);$url = addslashes($url);$sql = "insert into `tiny_url`(`short`,`long`) values ({$short},{$url})";$mysql->runSql($sql);if($mysql->errno() != 0){ echo "生成失败";}else{ echo "/{$short}";}break; case out:if(strlen($url) > 5) echo $this->retJson(array("code"=>"-1","msg"=>"没有这条记录"));$sql = "select * from `tiny_url` where `short`={$url} limit 1";$data = $mysql->getData($sql);if(!$data) { echo $this->retJson(array("code"=>"-1","msg"=>"没有这条记录"));}else{ $location = urldecode($data[0][long]); header("Location: {$location}"); exit();}break; default:# code...break; } } }$url = isset($_GET[url]) ? $_GET[url] : null;$act = isset($_GET[act]) ? $_GET[act] : null;$snapshotUrl = new snapshotUrl();if($url === null || $act === null) echo $snapshotUrl->retJson(array("code"=>"-1","msg"=>"参数错误"));$snapshotUrl->dispose($url, $act);

结果

我做了个可以测试的小网页:

/有兴趣的可以试试

本文版权归作者iforever(luluyrt@)所有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。