V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
whatsmyip
V2EX  ›  分享创造

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

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

    在我有 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
    whatsmyip  
    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 下载的吧,默认被识别成 GB2312 了。

    下个 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 类的没人管

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

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

    原网址:
    my5353.c0m/
    短网址:
    my5353.c0m/rPrF6
    sobigfish
        31
    sobigfish  
       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
    @chuhemiao

    😄
    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
        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   ·   实用小工具   ·   5659 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:29 · PVG 14:29 · LAX 22:29 · JFK 01:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.