长url转换成短url进行重定向

  • ·思路
  • ·详细方法步骤
  • ·实现方法
  • ·注意
  • ·具体效果
  • ·代码
  • ·心得

·思路


1,获取url并做好传值,如何沟通前后端 => javascript;安全相关 xss SQL注入 etc。

2,使用 PHP 设置一个发号器 对于任意给我的一个url ,将其转换为loacalhost/xxxx;

3,将localhost/xxxx与www.xxxxx.com 建立映射表(基于mysql数据库存储于本地服务器端);

4,编写本地网页localhost/xxxx 的重定向操作 =>
访问local服务器数据库传递自身url由映射关系得到目标url并返回 =>
拿到返回的url修改header对其本身网站发出请求完成重定向。

·详细方法步骤


长url的录入 => 长url值的传递 => 如何构建一个生成短url的策略 => 立长url和短url的映射 => 关系的存储 =>新文件新header的生成

·实现方法


1.url使用get方法用form表单录入
2.长url与短url使用一个带有自增主键id的 基于mysql的数据库存储 且会在有新的longurl插入时 根据primary key id 生成独一无二的短url
3.在同一网页中,使用Ajax技术实现异步传递long_url获取返回值responsetext并赋值给span
4.短url的生成很简单:每来一个新的url 使用 select max(id)from table 获取当前的最大id值并加1 生成一个当前的max_id,再使用发号器(一个小的 进制转换器 拿到id值 将其变为一个26进制(最高可62进制)的字符串 并返回 再与"http://bian.com/ “.url.”.php"进行一个简单的字符串拼接得到 我的shorturl。
5.然后将shorturl 和longurl 对应插入到我的新表中,主键 id auto ++;
6.最后使用openfile创建一个名为 $short_url.php 的目标网站 供实现重定向

·注意

1.有表单的提交需要预防xss 和sql注入 目前只简单防止了xss攻击(使用 htmlspecialchars($url, ENT_QUOTES)函数,sql注入因为有点不知道怎么处理。
2.挺多需要考虑,但是因为能力和时间因素没有去做的东西:
a.**信息在传输中的安全问题 **。
b.发生高并发请求时的解决方案
c.多次访问请求数据库的时间损耗(想要实现一个cookies以加快查询,但是可能我的考虑有问题导致我认为逻辑上不可行或者无意义)。
d.界面可以更人性化一点。
e.代码编写上不够正规,有点乱,编程能力一般。
f.发号机制可能过于取巧,不知道能否应对更复杂的情况或者说是否会带来额外开销。

·具体效果

1.实现基础页面 输入longurl点击函数后得到shorturl:

2.将short_url 复制到浏览器enter 观察是否重定向成功:(注意,我是基于localhost做的,不清楚的朋友可以了解一下计算机网络&phpstudy这个网站上的知识)


3.定向到baidu.com:成功!

·代码

主要代码文件是这两个:

//  gethint.php
// by ?  Yaaazi     -  2018/09/19
<?php
function getNextNum(&$my_short_url,$n,$sys) {$bit = array('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','z');   //26进制 if ($n == 0) {return;}getNextNum($my_short_url,floor($n/$sys),$sys);                  //递归取余$my_short_url .=  $bit[$n%$sys];
}$flurl = $_GET["temp_url"];                     //通过Get[name]提交表单传值到服务器端
$lurl = htmlspecialchars($flurl, ENT_QUOTES);              //htmlspecialchars()防止xss注入//定义header
$myheader = "
<?php  header('HTTP/1.1 301 Moved Permanently');  header('Location:".$lurl."');
?>";
$my_id = "root";
$my_password ="root";
$my_server = "bian.com";
$my_short_url = "";
$my_database_name = "urlstore";$con = mysql_connect("$my_server","$my_id","$my_password");            //访问数据库
if (!$con){die('Could not connect: ' . mysql_error());
}
mysql_select_db("$my_database_name", $con);//查询是否已经存在该url//输出其映射关系
$sql_if_exist = "select * from src_aim where long_url = '".$lurl."'";
$result = mysql_query($sql_if_exist);
if($row = mysql_fetch_array($result)){echo "http://bian.com/" . $row['short_url']. ".php";
}else{$sql_get_maxid = "select max(Id) from src_aim";                //发号器原理:通过数据库的自增id $max_line = mysql_query($sql_get_maxid);             //取出这个值为其 发号,可避免重复if($row1 = mysql_fetch_row($max_line)){                   //但可能会存在浪费or并发方面的问题$max_id = $row1[0] + 1;}getNextNum($my_short_url,$max_id,26);                          //发号器$sql_add_item = "insert into src_aim (short_url,long_url) values ('" . $my_short_url . "', '" . $lurl . "')";                                   //插入新的映射关系mysql_query($sql_add_item);$sql_if_success = " select * from src_aim where long_url = '".$lurl."' ";$rs = mysql_query($sql_if_success,$con);                     if (!$rs) {die('Failed Insert : ' . mysql_error());                       }                                                               $myfile = fopen ("$my_short_url.php", "w");                //使用w打开创建文件if (!$myfile) {echo " Init failed  \n";exit;}else{fwrite ($myfile, $myheader);fclose ($myfile);}echo  "http://bian.com/" . $my_short_url . ".php";
}   mysql_close($con);?>// by ?  Yaaazi     -  2018/09/19

第二个是主页:

<html>
<head>
<meta charset="utf-8"/><script type="text/javascript">function showHint()                     //Ajax异步获取服务器返回的信息
{
var furl = document.getElementById("txt1").value;//获取lurl
var xmlhttp;
if (furl.length==0){document.getElementById("txtHint").innerHTML="";return;}
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("txtHint").innerHTML=xmlhttp.responseText; //传回echo}}xmlhttp.open("GET","gethint.php?temp_url="+furl,true);
xmlhttp.send();
}
</script></head>
<body><h3>请在下面的输入框中键入长链接:</h3>
<form action="">
long_url:<input type="text" id="txt1" value="http://baidu.com" />
</form><input type="button" onclick="showHint()" value="调用函数">
<p>short_url:<span id="txtHint"></span></p> </body>
</html>

·心得

对这几个比较生疏的语言和领域 ,编写基础代码上浪费了比较多的时间,在这里感谢我的室友王建民在我有问题的时候能帮助我解决一些问题然后相互讨论,学到了很多。
也算是动起手来了吧,自己玩了一两年,动手能力比较差,然后一些基础课程,关键课程也是边学边忘。
越是感觉到基础的重要性 特别是数学。一定要好好规划一下,抓紧时间学习才行
git就大概看了一下,但也是add commit push上的,不是那啥直接拖上去的( >。> 小王是把代码拖上去的!!!!!他不会用git hhhhh);一些前端的请求模板是直接从 w3c 上拿过来用的,也参考很多博客查了很多东西,具体也记不起来了,一起感谢了~。

url的转换与重定向相关推荐

  1. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)

    http://lesca.me/archives/htaccess-rewrite.html/comment-page-1#comment-16045 目录 Table of Contents 一.准 ...

  2. Google App Engine for Java下的URL编码转换问题

    URL编码问题 此部分参考英文资料: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm http://www.w3school ...

  3. php url gb2312 utf8,php实现utf-8与gb2312的url编码转换

    在现在的网页应用中,utf-8编码和gb2312编码是并存在的,例如百度(baidu.com)和谷歌(google.com)的url编码分别是gb2312编码和utf-8编码. 由于编码并存引起的乱码 ...

  4. 迅雷thunder://地址与普通url地址转换

    转自:http://www.ctrol.cn/post/freesource/freegoods/08-13-ctrol-3855.html 迅雷thunder://地址与普通url地址转换 其实迅雷 ...

  5. python URL解析转换成字典

    引用包: import urlparse 获取URL: url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_ ...

  6. URL如何转换成pdf?

    文章目录 URL如何转换成pdf? 方案一: IText方式 [相关依赖] [代码实现] 方案二: FlyingSaucerf方式 依赖: 代码实现: 测试用例: URL如何转换成pdf? IText ...

  7. java重定向url_Java根据新的URL 对网页进行重定向

    时间:2019-01-24 概述:重定向 Java根据新的URL 对网页进行重定向,当我们将网页的链接改变后,我们希望打开一个链接后能自动转到这个新的连接.本例通过编程实现了打开一个网页根据网页中提供 ...

  8. java url地址编码转换_java url编码转换

    [转载于:  因为在做链接来源统计的时候需要把 http://www.baidu.com/baiduword=%D6%D0%B9%FA%B4%F3%B0%D9%BF%C6%D4%DA%CF%DF%C8 ...

  9. Django url末尾斜杆 / 的重定向问题

    Django 的配置参数 APPEND_SLASH (布尔值)会自动给网址结尾加斜杆('/'). 如上图: 使用 请求 POST /login   301   被重定向到了  GET /login/  ...

最新文章

  1. ffmpeg 基本用法大全
  2. Redis第四集:redis的基本知识说明
  3. 手动绑定数据到GridView并实现编辑,删除,取消···
  4. Intel Realsense D435 测试视频流的直方图均衡化
  5. mysql和mariadb可以同时使用吗_10分钟实现MariaDB与MySQL在一台服务器同时运行
  6. (JAVA)正则表达式
  7. c语言拍飞虫课程设计报告,C++语言课程计一拍飞虫.doc
  8. Python day2 数据类型 字符类型 文件处理
  9. java采集温湿度水浸_智能电力水浸监控解决方案
  10. 精心准备了10个行业30张大屏模板,0代码直接套用
  11. java知识点博客园_JAVA基础知识回顾
  12. HTTP、SSL/TSL、HTTPS、TCP、UDP
  13. 股票软件c++源代码
  14. java动态运行代码并动态执行
  15. java猜成语,成语疯狂猜-疯狂猜成语下载-javaweb下载站
  16. kubernetes基础组件原理
  17. matlab从无到有系列(九):Simulink基础仿真详解(全网最全,从入门到放弃)
  18. AcWing《蓝桥杯集训·每日一题》—— 3777 砖块
  19. Android P 亮屏慢分析
  20. 查公众号文章阅读量接口,简单版本

热门文章

  1. 博弈论在自动驾驶方向的应用(Ⅰ):变道决策的综述
  2. 【CFD理论】对流项-02
  3. BufferedImage 图片打水印
  4. Canva在线免费图表制作工具
  5. UNITY与Mac⭐一、在苹果电脑上配置 Unity 安卓环境的教程
  6. 自媒体文章一文多发的几种方式
  7. linux下使用mail定时发送邮件-阿里企业邮箱发送
  8. Dijkstra算法的思想
  9. 数字逻辑——触发器的选用和使用注意事项
  10. TNF 又见 《Cell》