两年前写的短网址服务更新到 2.0 版本!支持自定义、统计,以及各种管理功能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
whatsmyip
V2EX    分享创造

两年前写的短网址服务更新到 2.0 版本!支持自定义、统计,以及各种管理功能

  •  
  •   whatsmyip
    newnius 2018-12-14 16:53:29 +08:00 7900 次点击
    这是一个创建于 2497 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在我有 Mac 之前,如果看到有意思的东西,想要分享给基友,就不得不手打一遍网址( Linux 党表示很绝望)。。。一大段网址下来,早就没有继续分享的欲望了。

    后来发现有短网址服务,然而国内很多都是白名单机制,一大堆域名都不支持,于是抱着学(wa)习(keng)的想法决定自己写一个。

    最初的版本很简单,只有生成短链接和跳转功能,没有统计,甚至也没有管理功能,但是用起来很爽,就这么用了两年。

    最近心血来潮,把之前的项目全都更新了一遍。。。

    参考各种现有的短网址服务,第二版加了不少功能,从最基本的管理到统计:

    1. 支持自定义短网址
    2. 同时生成对应的二维码,拿起手机扫一扫
    3. 支持短网址有效期设置
    4. 支持对短网址的二次编辑
    5. 支持暂时停止短网址的跳转
    6. 支持形式丰富的访问统计分析(其实挺丑陋的)
    7. 支持添加短网址备注,便于查看
    8. 支持导出短网址列表
    9. 去除了容易混淆的字符
    10. 采用 307 状态码,保留原始请求方法
    11. 启用 HTTPS 加密通信,降低个人隐私泄漏的风险
    12. 没有恶心人的域名白名单限制,除了儿童色情、恶意病毒等人神共愤的内容,不做其他限制

    关于使用的技术

    • 前端用的是陈旧但是简单的 Bootstrap v3,其他的前端框架一直懒得学
    • 后端 PHP 写的( PHP 是最好的语言)
    • 基于 Redis 加了缓存功能,只用了最简单的缓存 5 分钟机制,其他的可以通过 Redis 来设置
    • 关于统计数据,本来是打算放到 ClickHouse 里的,再用 RabbitMQ 解藕,但是考虑到实际情况以及部署难度,就直接写到 Mysql 数据库了,就算哪天真的量大了,替换一下也比较简单。

    一开始用的自己的主域名,但是怕短网址被滥用的话会影响到其他子域名,所以这次直接注册了一个新的域名,彻底放开使用。

    网站都放在国外,套了一层 cf,可能速度会比较慢。(鄙视阿里云审查我的服务器流量)

    短网址生成器 网址: https://my5353.com/

    登陆之后可以对自己的短网址进行管理。不想注册新用户的话可以用 v2ex/KxuRSTrR0hopXQhB 这个账号。

    (顺便推广一波我的在线随机密码生成器 ,网址 https://easypwd.newnius.com/ 。这个是部署在又拍云上的,纯静态站点,访问应该很快。)

    代码开源在 GitHub , 网址: https://github.com/newnius/short-link。

    欢迎大家使用和 star

    第 1 条附言    2018-12-14 21:56:37 +08:00
    是允许非网址的,因为我有时候当粘贴板用
    56 条回复    2020-06-08 16:34:06 +08:00
    whatsmyip
        1
    whatsmyip  
    OP
       2018-12-14 16:55:50 +08:00
    顶一顶
    a62527776a
        2
    a62527776a  
       2018-12-14 17:04:55 +08:00
    原网址 https://dscsdoj.top/
    短链接 https://my5353.com/O2JBK

    emmm....好像发现了什么不得了的事情
    →。→
    a62527776a
        3
    a62527776a  
       2018-12-14 17:06:53 +08:00
    技术还是点赞!
    wofave
        4
    wofave  
       2018-12-14 17:09:50 +08:00 via iPhone
    太需要国内正常工作的短网址服务了 感谢!
    whatsmyip
        5
    watsmyip  
    OP
       2018-12-14 17:10:27 +08:00
    @a62527776a

    emmmm 谢谢支持呀
    whatsmyip
        6
    whatsmyip  
    OP
       2018-12-14 17:11:40 +08:00
    @wofave

    其实还是挺多的吧,毕竟短网址就跟 todo 一样都快成练手玩具了。。。
    annoy1309
        7
    annoy1309  
       2018-12-14 17:14:39 +08:00
    借楼推荐一下 YOURLS,稍微有一点技术基础就能搭建一个自己的短网址系统
    annoy1309
        8
    annoy1309  
       2018-12-14 17:21:29 +08:00
    几个小建议:1 建议对高频转换地址进行做一个高频表,你现在用不到,但是到了你短网址数量 100w+的时候,你会发现,数据库里一大堆都是相同的网址,同一个长地址,产生多条短地址记录,这明显是浪费空间的。
    2.去除混淆字符这块,我觉得没必要自己造轮子,现有的 BASE58 完全能满足
    whatsmyip
        9
    whatsmyip  
    OP
       2018-12-14 17:22:27 +08:00
    @annoy1309

    我也觉得 yourls 挺好的,比较成熟。但是东西一多,就显得比较复杂 /凌乱了。
    whatsmyip
        10
    whatsmyip  
    OP
       2018-12-14 17:25:44 +08:00
    @annoy1309

    谢谢指教,长见识了,混淆字符这个主要是自己用的时候觉得挺不爽的,没想到已经有这么成熟的工具了。
    timothyye
        11
    timothyye  
       2018-12-14 17:41:45 +08:00
    之前也用 Go 搞了个简单的,没有楼主功能多: https://biturl.top/
    whatsmyip
        12
    whatsmyip  
    OP
       2018-12-14 17:53:05 +08:00
    @timothyye

    都是慢慢加上来的,专注最用的一点也挺好的。
    sheeta
        13
    sheeta  
       2018-12-14 18:31:10 +08:00 via Android
    duoduo1x
        14
    duoduo1x  
       2018-12-14 18:36:46 +08:00   1
    你这域名一点也不短啊
    xiaotuzi
        15
    xiaotuzi  
       2018-12-14 18:48:19 +08:00
    这域名一点都不短…
    我自己撸了一个自用 http://t.2wex.com
    unique
        16
    unique  
       2018-12-14 18:53:18 +08:00
    感谢楼主的开源和分享,我将这个项目分享在 https://t.me/github_cn 了!
    liunull
        17
    liunull  
       2018-12-14 19:00:00 +08:00 via Android
    我也想说域名不短
    mywaiting
        18
    mywaiting  
       2018-12-14 20:04:03 +08:00
    本来想挖坑写个 aff 链接的 tracker,忽然发现有 url shortener 这现成的可以用 /:doge:/
    zgcwkj
        19
    zgcwkj  
       2018-12-14 20:30:11 +08:00
    导出 JSON,默认记事本无法打开(乱码),好像是识别不了编码格式
    whatsmyip
        20
    whatsmyip  
    OP
       2018-12-14 21:07:08 +08:00
    @sheeta

    明明设置了 dead loop 的限制,看来间隔还是太长啊,我再调大点
    whatsmyip
        21
    whatsmyip  
    OP
       2018-12-14 21:12:12 +08:00
    @duoduo1x
    @xiaotuzi
    @liunull

    3 位跟 7 位差别也没那么大吧,谁还手打啊
    whatsmyip
        22
    whatsmyip  
    OP
       2018-12-14 21:13:02 +08:00
    @mywaiting

    就是因为要跟踪,所以加了管理和统计功能。。。
    whatsmyip
        23
    whatsmyip  
    OP
       2018-12-14 21:18:57 +08:00
    @zgcwkj

    我导出是正常的,你应该是用 Windows 下载的吧,默认被识别成 了。

    下个 notepad++( https://notepad-plus-plus.org/download/ ) 或者 atom ( https://atom.io/ ),然后改一下编码(UTF-8)就可以了

    Windows 下面记事本乱码很常见
    whatsmyip
        24
    whatsmyip  
    OP
       2018-12-14 23:05:10 +08:00
    @unique 谢谢支持呀
    yamedie
        25
    yamedie  
       2018-12-15 07:17:45 +08:00 via Android
    我也做过一个短网址,没楼主的功能多,但比楼主的好玩 http://qnmb.ooo
    luckyroach
        26
    luckyroach  
       2018-12-15 07:51:52 +08:00 via Android
    做短网址有没有风险被查水表
    ppgame
        27
    ppgame  
       2018-12-15 09:03:16 +08:00 via Android
    @yamedie github 来一发装个玩玩
    whatsmyip
        28
    whatsmyip  
    OP
       2018-12-15 10:29:31 +08:00
    @yamedie

    哈哈,有意思
    whatsmyip
        29
    whatsmyip  
    OP
       2018-12-15 10:30:48 +08:00
    @luckyroach


    只做转发,又不提供内容的。

    1024 类的没人管

    其他的么,想看你也看不见
    run2
        30
    run2  
       2018-12-15 12:20:37 +08:00
    没做查重。。。所以 预防域名识别 o 改成了 0

    原网址:
    my5353.c0m/
    短网址:
    my5353.c0m/4eica

    原网址:
    my5353.c0m/
    短网址:
    my5353.c0m/rPrF6
    run2
        31
    run2  
       2018-12-15 12:35:52 +08:00
    没做查重。。。所以 。。很多重复的你怎么办?
    ps:预防域名识别 o 改成了 0
    luckyroach
        32
    luckyroach  
       2018-12-15 12:41:01 +08:00 via Android
    你的 github 挂了。。。打开 404
    whatsmyip
        33
    whatsmyip  
    OP
       2018-12-15 12:49:12 +08:00
    @sobigfish

    故意不做的,因为不同的人可能会创建指到同一个地址的短链接,而且还能维护,查看统计信息。

    后期空间问题的话,可以像上面哥们提出的一样,通过高频表压缩。
    whatsmyip
        34
    whatsmyip  
    OP
       2018-12-15 12:50:23 +08:00
    @luckyroach

    v 站解析问题,后面多了一个句号。你可以直接点文字链接的。
    timothyye
        35
    timothyye  
       2018-12-15 14:55:38 +08:00 via Android
    @yamedie 这网址
    chuhemiao
        36
    chuhemiao  
       2018-12-15 15:22:44 +08:00
    网站规则未匹配,手残输错了。。。com 变 coom 了
    whatsmyip
        37
    whatsmyip  
    OP
       2018-12-15 16:33:10 +08:00
    zdb1115
        38
    zdb1115  
       2018-12-16 00:30:57 +08:00
    谢谢分享,这个很乱,
    greenhat233
        39
    greenhat233  
       2018-12-16 11:28:39 +08:00 via Android
    一直用 t.im
    greatbody
        40
    greatbody  
       2018-12-16 15:40:20 +08:00
    @annoy1309 有些业务场景还是可能需要多个不同的短网址的。比如不同的人分享同一个网址,大家的统计数据应该是不同的。
    eamo
        41
    eamo  
       2018-12-16 18:06:22 +08:00
    可以装在子目录吗?比如我的域名 https://95s.me 已经在用了,可以用 https://95s.me/t/ 作为短网站前缀吗?
    可以不用设置成数字递增式?例如 https://95s.me/t/1 , https://95s.me/t/2 这种?这样就可以直接快速的键盘输入了
    whatsmyip
        42
    whatsmyip  
    OP
       2018-12-16 20:37:53 +08:00
    子目录是可以的,修改 配置文件 static/config.js 和 config.inc.php ,然后再 修改一下 .htaccess 里面的网址应该就可以的
    imshf
        43
    imshf  
       2018-12-17 10:58:06 +08:00
    @yamedie 可以呀,老哥,相当优秀了
    imshf
        44
    imshf  
       2018-12-17 11:00:11 +08:00
    以前一直用新浪短链接,用着还行,今天发现了好多好玩的短链接哈哈
    yamedie
        45
    yamedie  
       2018-12-17 14:59:12 +08:00
    @imshf 哈哈, 不要试图在 V2 的回帖发短链接, 因为包含 URL 点 cn, 尝试发两次, ip 就会被 ban 一天, 不要问我是怎么知道的 ::doge::
    i4oolish
        46
    i4oolish  
       2018-12-17 15:10:57 +08:00
    自不自持跳转链接负载均衡,以及防屏蔽?
    whatsmyip
        47
    whatsmyip  
    OP
       2018-12-17 15:47:15 +08:00
    @yamedie ban 一天这么猛的吗
    whatsmyip
        48
    whatsmyip  
    OP
       2018-12-17 15:51:16 +08:00
    @i4oolish

    短链接做负载均衡,这个要求高级了,不一般都是在服务器前端接 nginx、或者是 dns 分区解析么。

    防屏蔽这个没法做呀,需要监控有没有被屏蔽以及自动切换域名
    i4oolish
      &bsp; 49
    i4oolish  
       2018-12-17 16:42:56 +08:00
    @whatsmyip
    我的意思是一个短连接对应后端几个真实链接,用户点击短连接的时候,根据具体情况,跳转到不同的真实链接。
    比如在微信上分享链接就存在这样的应用场景。
    在短连接跳转到后端真实链接的时候,快速做一个判断后端哪个链接没有被屏蔽,以及后端的链接有没有达到自定义的设置(比如 1 分钟内访问了 1000 次),根据后端的这些规则,来给微信用户返回最合适的后端链接。
    set01
        50
    set01  
       2018-12-19 09:28:28 +08:00
    还是限制一下比较好。如果有人通过你的服务跳 1024 的话,腾讯就会把你的域名加入风险域名,禁止微信直接访问
    whatsmyip
        51
    whatsmyip  
    OP
       2018-12-19 09:58:30 +08:00
    @set01

    谢谢提醒,也是考虑到这个因素更换了域名。

    GFW 都投入使用那么多年了,效果也就那样,域名跟 IP 一样,是禁不完的,这精力花的可不值。除非启用白名单模式,但一个只能跳白名单的短链接服务又有什么意义呢。之前网站是部署在阿里云上的,它会自动去过滤这类的跳转,但是比较反感,我个人对 1024 类网站持开放态度,不太过分就行。

    至于风险域名,从用户角度,真正的风险域名阻断让浏览器来做好了,腾讯那些所谓的风险域名,说白了就是没交保护费罢了。

    而且,相信在阿里系的努力下,大家早就忽略腾讯所谓的风险域名了吧。
    atbeta
        52
    atbeta  
       2018-12-19 17:14:00 +08:00
    原来这个真的有需求啊,用了目前主流的几个发现,网址都太长了,自己搭了一个超简单的自己用,现在还没做样式,计划近期做一下样式,站内朋友可以试用,只支持缩短网址,没有其他功能。

    https://ttt.st
    atbeta
        53
    atbeta  
       2018-12-19 17:15:49 +08:00
    用的现成代码 CRZ.im ,页面底部就是作者的 github 链接
    JUNJIE98
        54
    JUNJIE98  
       2018-12-22 16:57:01 +08:00
    那我来发个粘贴板 copy.atodo.cn
    whatsmyip
        55
    whatsmyip  
    OP
       2018-12-22 22:55:53 +08:00
    @JUNJIE98

    这个是共享编辑框?好像隐身打开也可以编辑
    MartinMusic
        56
    MartinMusic  
       2020-06-08 16:34:06 +08:00
    我知道国内有个挺不错的短网址服务平台,可以接入自己的域名,大家可以研究一下 ,叫米发
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     903 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 20:41 PVG 04:41 LAX 13:41 JFK 16:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86