请选择 进入手机版 | 继续访问电脑版

网格Pro

 找回密码
 立即注册
查看: 1215|回复: 0

[完结] yourls_1.7.9 短域名系统 +配置优化+规则修改

[复制链接]
发表于 2020-3-30 22:54:13 | 显示全部楼层 |阅读模式
嫌烦 可以直接看结尾


admin-dashboard.gif

stats-anim.gif

用yourls 搭建短链接地址服务
疫情期间没事瞎折腾,索性就研究了下yourls 。
发现这个玩意功能挺强大的,不但可以批量生成自己的短地址,还可以管理,统计每个短地址点击数量,还可以提供api接口。
最重要的是,这个开源免费,自己拿来做二次开发再适合不过了回帖1楼 是修改方法


下载地址
https://github.com/YOURLS/YOURLS/releases

自家用完全无敌了。
1、将user目录下的config-sample.php 重命名 为 config.php
2、修改config.php里面的配置参数 (linux上注意:config.php这个文件权限最好跟启动Web服务器用户一致,不然可能加密密码保存不了
几个重点

Yourls 提供两种 URL 编码形式,

一种是只有小写的 Base 36 encoding 0123456789abcdefghijklmnopqrstuvwxyz

还有一种是有大小写的 Base 62 encoding 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

一般来说,使用默认的 Base 36 即可,因为要使用 Base 62 需要空间支持 phpBCMath 扩展,而且没什么必要,

个人用 Base 32 足矣,官方宣称可以创建 4,738,381,338,321,617,846 个短网址,

所以没什么特殊情况就不用修改 config.php ,用默认的编码即可。

后台地址是 http://你的地址/admin/ 当然可以修改 admin 文件夹的名字以防万一

管理员的用户名和密码都在 includesconfig.php 里自己设置,不推荐使用常用的密码

毕竟是明文形式储存,所以想一个复杂点的没用过的密码最好不过。



  1. define( 'YOURLS_DB_USER', 'root' );
  2. define( 'YOURLS_DB_PASS', '123456' );
  3. define( 'YOURLS_DB_NAME', 'yourls' );
  4. define( 'YOURLS_DB_HOST', 'localhost' );
  5. define( 'YOURLS_DB_PREFIX', 'yourls_' );
  6. //上面是数据信息不用多说
  7. define( 'YOURLS_SITE', 'http://test.com' ); //你自己服务器的域名 用最短的,短地址也是基于这个生成。
  8. define( 'YOURLS_HOURS_OFFSET', '+8');    //时区偏移 
  9. define( 'YOURLS_LANG', 'zh_CN' );      //这个语言默认是英文,没有中文包,需要自己去 [url]https://github.com/guox/yourls-zh_CN/[/url]下载,放到 user/languages 里面 
  10. define( 'YOURLS_UNIQUE_URLS', true );   //短地址是否唯一 
  11. define( 'YOURLS_PRIVATE', true );         //是否私有,如果私有的,则进行api调用生成短地址时需要传递用户名和密码
  12. define( 'YOURLS_COOKIEKEY', 'A2C7&H~r80pTps{nIfI8VFpTxnfF3c)j@J#{nDUh' );//加密cookie 去 [url]http://yourls.org/cookie[/url] 获取
  13. $yourls_user_passwords = array(
  14.     'admin' => '123456' /* Password encrypted by YOURLS */ ,  //用户名=>密码  可填多个  登录成功后这里的明文密码会被加密
  15.     );
  16. define( 'YOURLS_DEBUG', false );      //是否开启调试  
  17. define( 'YOURLS_URL_CONVERT', 36 );    //使用36进制 还是62进制  这个最好一开始设好不要修改,避免地址冲突,建议62进制
  18. $yourls_reserved_URL = array(
  19.     'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick',  //排除一下短地址,这些地址是不会生成的
  20. );
复制代码

nginx 配置里添加

  1.   # Rewrites  主要看这一项配置就够了,路由重写
  2.   location / {
  3.     try_files $uri $uri/ /yourls-loader.php$is_args$args;
  4.   }

  5. ------
  6. server {

  7.   # HTTP over IPv4 & IPv6
  8.   listen 80;
  9.   listen [::]:80;

  10.   # HTTPS over IPv4 & IPv6
  11.   listen 443 ssl;
  12.   listen [::]:443 ssl;
  13.   ssl_certificate     example.com.crt;
  14.   ssl_certificate_key example.com.key;

  15.   server_name example.com [url]www.example.com[/url];

  16.   # Root directory
  17.   root /path/to/yourls/files;

  18.   # Rewrites  主要看这一项配置就够了,路由重写
  19.   location / {
  20.     try_files $uri $uri/ /yourls-loader.php$is_args$args;
  21.   }

  22.   # PHP engine
  23.   location ~ .php$ {
  24.     include fastcgi.conf;
  25.     # include fastcgi_params;
  26.     fastcgi_index index.php;
  27.     fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
  28.   }

  29. }


复制代码


3、短地址默认是是按照顺序生成,从1开始,有可能我们想不按照这样顺序,可以推荐用时间戳来生成
  只需要修改 includes/functions.php  283行左右
  将 $id = yourls_get_next_decimal(); 改为 $id = time();
4、api接口生成   
  请求地址:http://域名//yourls-api.php
  参数:username(用户名)、password(密码)、format(格式 json)、url(长地址)、action(功能,shorturl)



1、GET请求,构建下get请求,可以直接访问也可以用python构建请求

  1. http://127.0.0.1/yourls-api.php?username=【登录账号】&password=【密码】&url=【添加的Url】&format=json&action=shorturl
  2. 或者
  3. http://127.0.0.1/yourls-api.php?signature=【token】&url=【添加的Url】&format=json&action=shorturl
复制代码


2、python构建get请求

  1. import requests, json

  2. url = "http://10.0.0.101/yourls-api.php?"
  3. data = {"username":"wgpro.com","password":"123456","url":"http://www.baidu.com","format":"json","action":"shorturl"}
  4. response = requests.get(url, data)
  5. print(json.loads(response.text))
复制代码


如果不指定format为json的话,默认是XML格式



2、POST请求
用python来发送POST请求测试
这里以form表单形式提交数据,所以不需要将POST的data转为json格式
POST请求的几种编码方式可以参考:帖子底部
  1. import requests, json

  2. url = "http://10.0.0.101/yourls-api.php?"
  3. data = {"username":"wgpro.com","password":"123456","url":"http://www.baidu.com","format":"json","action":"shorturl"}
  4. response = requests.post(url, data)
  5. print(json.loads(response.text))
复制代码



3、如果提示504 url过长的话,则在nginx增加

  1.     client_max_body_size 5m;
  2.     client_header_buffer_size 512k;
  3.     large_client_header_buffers 4 512k;
复制代码


如果遇到 Faithfully yours, nginx.错误,可能是cookies过长,可以看
https://blog.csdn.net/wang_quan_li/article/details/41802643

http字段中添加
  1.     proxy_buffer_size  128k;
  2.     proxy_buffers   32 32k;
  3.     proxy_busy_buffers_size 128k;
复制代码


php配置中添加
  1.         fastcgi_buffer_size 128k;
  2.         fastcgi_buffers 4 256k;
  3.         fastcgi_busy_buffers_size 256k;
复制代码


如果还是不行就在location转发中也添加
  1.     proxy_buffer_size  128k;
  2.     proxy_buffers   32 32k;
  3.     proxy_busy_buffers_size 128k;
复制代码







Python使用requests发送post请求
1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下:

A:application/x-www-form-urlencoded ==最常见的post提交数据的方式,以form表单形式提交数据

B:application/json    ==以json格式提交数据

C:multipart/form-data  ==一般使用来上传文件(较少用)

2.我们使用python做接口测试时,经常使用的方式为:requests.post(url,data),具体我们使用不同的编码方式来做接口测试:

A:Requests以form表单形式发送post请求,具体代码实现如下所示:


  1. import requests,json

  2. url = 'http://httpbin.org/post'
  3. data = {'key1':'value1','key2':'value2'}
  4. r =requests.post(url,data)
  5. print(r)
  6. print(r.text)
  7. print(r.content)
复制代码

A1:运行结果如下所示:
1034663-20180830103022792-73613269.png

B:Requests以json形式发送post请求,具体代码实现如下所示:

  1. import requests,json

  2. url_json = 'http://httpbin.org/post'
  3. data_json = json.dumps({'key1':'value1','key2':'value2'})   #dumps:将python对象解码为json数据
  4. r_json = requests.post(url_json,data_json)
  5. print(r_json)
  6. print(r_json.text)
  7. print(r_json.content)
复制代码


B1:运行结果如下所示:

1034663-20180830103401283-237370186.png

C:Requests以multipart形式发送post请求,具体代码实现如下所示:

  1. import requests,json

  2. url_mul = 'http://httpbin.org/post'
  3. files = {'file':open('E://report.txt','rb')}
  4. r = requests.post(url_mul,files=files)
  5. print(r)
  6. print(r.text)
  7. print(r.content)
复制代码


C1:运行结果如下所示:

1034663-20180830104131438-422567808.png

注:E://report.txt==自定义,具体根据自己放的目录来定义,内容随意





优化下连接格式

修改自定义格式

Q:什么要修改自定义格式
a:在英文中有很多难以辨识的单词。如果有需要自行修改。

容易混淆的英文与数字有!

36字段 全小写
1和l
o和o
2和z
9和g
5和s
vv和w
nn和m

修改
\includes\ifunctions.php
        $charset = '0123456789abcdefghijklmnopqrstuvwxyz';
改为        $charset = '34678abcdefhijkpqrtuxy';
就是23进制了
如果使用 时间戳 长度是7位


  1. 位置 20行
  2.     if( defined('YOURLS_URL_CONVERT') && in_array( YOURLS_URL_CONVERT, array( 62, 64 ) ) ) {
  3.         $charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  4.     } else {
  5.         // defined to 36, or wrongly defined
  6.         $charset = '0123456789abcdefghijklmnopqrstuvwxyz';
  7.     }
复制代码

缺点

被屏蔽掉的数字字母,将无法使用(包括 自定义域名)
例:http://uid.cool/213

上面的方法 配合时间戳生成 7位长度
下面的方法 是自家用格式

起始格式 210   220  290 990
年后两位 2021年 取21 +十进制ID递增


278行处参考以下修改

  1.                         //$id =yourls_get_next_decimal();   //使用整数递增+1删除以下
  2.                         //$id = time();  //使用时间戳 删除 //add 开始至结束
  3.                         $id = date ( "y"). '0'; //去年后两位 如2021年 取得21+数字格式 组合后例210开始
  4.              //$id = '230';//测试

  5. //add 修改的开始

  6. //如果 当前年 = 库记录内年
  7. if ( date ( "y") == substr(yourls_get_next_decimal() ,0,2))
  8. //if ( '23' == substr(yourls_get_next_decimal() ,0,2))//测试用
  9. {
  10.         # code...获取数据库内顺延编号 如 21 889 去除前两位年 得到 889
  11.         $xid =substr(yourls_get_next_decimal() ,2);
  12. //遇到9 99..
  13. if ($xid== '' or $xid== '9' or $xid == '99' or $xid =='999' or $xid =='9999' or $xid =='99999' or $xid =='999999' or $xid =='9999999' or $xid =='99999999' or $xid =='999999999' or $xid =='9999999999')
  14. {
  15.         $id = date ( "y").'0'.$xid;  //new id   进位添加0 如 099
  16.                 //$id =  '230'.$xid;  //测试用
  17. }
  18. else
  19. {
  20.          $id =yourls_get_next_decimal();
  21. }


  22. }
  23. else
  24. {
  25.         # code...
  26.         //当前年改变如新一年  23年则重新生成id 从230开始

  27.                         $id = date ( "y").'0';  //new id
  28.            //$id = date ( "23").'0';  //测试用
  29. }
  30. //add 结束


复制代码



本人使用的 十进制 格式  年 2021年 取末尾 21年 + 十进制ID递增
格式:年+0
例 210  //21年第一个   
     220   22 年第一个
     990   22 年第一个   

遇9 添0  为了下次递增 方便进位   否则  就会进位至日期
例 219   21年第一9个
218 --> 2109 -->2110
21998  -->210999 -->211000



1.7.9.tar.gz

2.4 MB, 下载次数: 48

yourls_1.7.9源码

functions.7z

21.42 KB, 下载次数: 75

自家用十进制替换可用

回复

使用道具 举报

手机版|联系我们 ( 京ICP备16001788号 )

GMT+8, 2021-6-24 12:09

Powered by Discuz! X3.4

快速回复 返回顶部 返回列表