上星期遇到一個問題
現在爬蟲盛行,網站上舊有的文章都是用ID做網址
為了避免爬蟲使用文章編號在網址列上讀取文章
為了增加爬蟲難度,所以要加一個欄位做代稱,就叫做 aliasId吧
aliasId 是一個亂數產生的11位元英數混合字串
新增新文章時會一併產生
之後的網址就使用aliasId,若使用者輸入編號,也會跳轉到aliasId的網址
為了避免爬蟲使用文章編號在網址列上讀取文章
為了增加爬蟲難度,所以要加一個欄位做代稱,就叫做 aliasId吧
aliasId 是一個亂數產生的11位元英數混合字串
新增新文章時會一併產生
之後的網址就使用aliasId,若使用者輸入編號,也會跳轉到aliasId的網址
問題是舊文章沒有這個欄位的值
原先會在文章頁面判斷來的是ID還是aliasId
再顯示對應頁面資料
原先會在文章頁面判斷來的是ID還是aliasId
再顯示對應頁面資料
如果用文章ID作為連結,會抓取該ID的aliasId,並導向aliasId作為連結的網站
現在要讓用ID進來的也轉aliasId的網址,勢必要把那些aliasId為空的舊文章補上
否則會視為文章不存在跳回首頁
現在要讓用ID進來的也轉aliasId的網址,勢必要把那些aliasId為空的舊文章補上
否則會視為文章不存在跳回首頁
而上頭給的做法是,寫一隻只執行一次的crontab 在server上面執行就刪掉
而寫出來並在本機&測試機執行都沒問題之後交給負責server的同事I
同事I表示,這支不是我寫的我不確定會不會遇到什麼問題
所以他不敢在server上幫我執行
之前另一個站也有這個需求,請教了當初處理這問題的同事G
他說「我就直接在server上面寫了執行就刪掉,根本沒上版庫」
我:「.............」
同事I:「.............」
在僵持了快十分鐘之後負責server的同事I想到一個比較安全,但是稍微不方便的作法
因為admin後台沒有cache,會直接撈資料庫文章出來
就在文章管理顯示所有文章的地方加一個判斷
如果撈出來的資料沒有aliasId這個欄位,就執行新增aliasId
並且把前台cache清除
並且把前台cache清除
這樣就避免掉直接在server上炸掉的風險,也不會一次對DB進行大量操作
只是要人工換很多頁而已XD
將較之下這個方法安全很多,而且執行完再移除該function更新一版上去就沒有痕跡了
在周末下班前能解決這個問題真的蠻開心的
留言
張貼留言