前言#
前兩天上網衝浪發現了一個有趣的專案 ooo,這個專案的有趣之處在於可以將你的一個連結重新編碼為一個全是「o」的新連結,你可以將這個連結發給別人整蠱一下。雖然說這個專案實際上意義不大,但是本著好奇他媽給好奇開門(bushi)的精神,我還是想自己部署一個玩一玩,於是就有了這篇文章,於是又誕生了一個全是 e 的站點 eeeeeeeeeeee.ee。
域名#
既然是一個小的 web 服務,還是一個基於域名跳轉的 web 服務,這個域名選擇就相當重要了,我直接跳過讀原始碼階段就準備先拿下一個域名,需求很簡單,全都是一個字母就行,然後統計了一下目前已知頂級域後綴相同的有 .ooo(infibeam註冊局)
、.ee(愛沙尼亞)
、.cc(可可群島)
、.gg(格恩西島)
、.tt(特立尼達和多巴哥)
、.bb(巴巴多斯)
、.xxx(用於成人網站)
。我之前的個人域名就是 ee 後綴的,所以我先去看了下 ee... ee. ee 這個域名,在輸入 12 個 e 的時候終於是可以用了,也去看了下別的幾個都是前綴 15 個字母起步,而且價格還不便宜,所以還是選擇了 ee 後綴的,主要是便宜,一年 69 元人民幣確實香。於是下單了 eeeeeeeeeeee.ee。
部署#
讀原始碼#
在簡單讀了一下 ooo 的原始碼後,大概實現過程是先在前端將給定的 URL 編碼為一個特殊的字串,並能夠將這個特殊的字串解碼回原始的 URL。編碼過程使用了一種基於特殊字元「o」的表示法,將 URL 編碼成包含四種不同「o」字元的字串。後端僅通過 Cloudflare Worker 服務,將經過 OOO 編碼的 URL 重定向到原始的 URL。在處理請求時,該 Worker 會將請求的 URL 中的路徑部分解碼,並將其作為經過 OOO 編碼的字串傳遞給 OOO 類的 decodeUrl 方法進行解碼。解碼後得到的字串即為原始的 URL,然後使用 Cloudflare 的 Response.redirect 方法將請求重定向到原始的 URL。
讀了原始碼其實我才發現,原來那些 o 並不是全部相同的 o,而是 4 個同形字元,四個不同的「o」字元(對應不同的 Unicode 編碼)。
同形字元#
所以現在我需要去找幾個 e 的同形字元,幸運的是有人整理過相關內容的文章,這裡不得不感嘆下光計算機字元裡的學問還挺多的,前幾天剛看到一個將用戶名無形地插入到具有零寬度字元的文本中的文章,也很有意思,有興趣的朋友可以去看看。這裡我選擇了 0065,0435 : eе 和 0275,04E9 : ɵө 雖然後面兩不太像,但也湊合。
前端頁面#
將專案克隆到本地,前端頁面其實要改的也不多,將 ooo.js
裡的 OOO 物件裡的四個「o」的字元換成我們自己的其實前端服務就能正常跑了,剩下就是改一些相應的內容樣式。這裡唯一需要注意的是,我們需要務必需要修改 currVer = "eeee"
改值為與你域名字母相同,這是一個前綴用來我們後端進行路由識別,我們修改完成後將其上傳到 Cloudflare Pages 服務中部署,並且綁定自定義域名為你購買的同字母域名(需提前將域名轉入 Cloudflare)。
後端服務#
前文有說到專案的後端服務是部署在 Cloudflare Worker 上的,後端涉及的程式碼為 worker.js
,在 Cloudflare 控制面板左側選項中,找到 Workers 和 Pages 新建一個 Workers 並將 worker.js
中的程式碼貼上點擊 Worker 設定面板快速編輯按鈕後出現的頁面中。此步務必需要注意貼上的程式碼中的解碼對應的字元需要與前端編碼字元對應,自行修改。修改完成點擊設定面板的觸發器選項,在路由處添加一個路由用來解析 URL,示例如下:
現在你可以去訪問你的域名看看出現編碼後的連結能否跳轉到目標地址了。如果不能正常跳轉,可能是你的域名沒有開啟 Cloudflare CDN,也就是那朵小黃雲我們需要打開,因為 worker 的自定義路由跳轉需要先通過 CDN 劫持到訪問的連結,不然是不可用的。
Just enjoy it!