69 期 - 10 分鐘完成維基網站架設 (下)

網管人雜誌

          本文刊載於 網管人雜誌第 69 期 - 2011 年 10 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。



文章目錄

1、前言
2、Oddmuse Wiki 進階設定
3、修改置頂文字連結 (Goto Bar Pages)
4、在文章內容中呼叫圖示 (Icons)
5、外部連結另開新視窗
6、網頁防護機制 (防止 DOS 攻擊)
7、圖片擴充模組 (Image Extension)
8、目錄內容擴充模組 (Table of Contents Extension)
9、隱藏頁面模組 (Hidden Pages Extension)
10、結語



1、前言

          在上一篇 Oddmuse Wiki 基礎設定的文章中 10 分鐘完成維基網站架設 (上),我們已經將 Oddmuse Wiki 引擎運作到的相關檔案及資料夾進行建議及設定的動作,也順利讓維基網站上線服務。然而維基網站的功能性僅僅如此嗎? 在本文中筆者就要舉例幾個實用的進階設定以及功能強大的模組檔案,來加強及擴充 Oddmuse Wiki 的安全性、功能性以及便利性。



2、Oddmuse Wiki 進階設定

          若讀者在前一篇基礎設定的設定過程中編輯主要設定檔時,有仔細查看 Oddmuse Wiki 主要設定檔內容,那麼您應該已經發現到設定檔中有許多進階參數可以進行修改及調校,下列便是筆者舉例在主要設定檔內容中一些實用的進階設定值,例如 修改置頂文字連結將英文文字連結修改為中文文字連結、並於網站文章內容中快速呼叫可愛圖示以彌補文字溝通上的不足,接著則是文字連結時若遇到外部連結則是另開新視窗,而非直接離開維基網站,最後則是如何啟用以及設定 Oddmuse Wiki 引擎的網頁保護機制以阻擋惡意使用者的 DOS 攻擊。



3、修改置頂文字連結 (Goto Bar Pages)

          在完成的維基首頁中,我們可以看到置頂的文字連結只有預設的 HomePage 及 RecentChanges 二個項目,您可以將此英文文字連結修改成中文文字連結,例如將 HomePage 修改為「首頁」而 RecentChanges 修改為「最新文章」,並且可以將常用到的文章項目加在此連結清單上,如此一來您可以在瀏覽文章時更快速切換在不同的文章項目之中,下列操作為將預設的英文文字連結修改為中文文字連結並且新增一個常用連結項目「虛擬化專案」。

          由於我們要將預設的英文文字連結修改為中文文字連結會牽扯到文字內容的編碼類型 (Encoding),因此筆者提醒您請使用支援 UTF-8 編碼類型的檔案編輯器來編輯 Oddmuse Wiki 主要設定檔,否則屆時修改後所呈現的置頂中文文字連結可能成為亂碼。
vi /home/web/cgi-bin/wiki.pl  //修改 Wiki 主要設定檔
  @UserGotoBarPages = ('HomePage', 'RecentChanges');    //預設值
  @UserGotoBarPages = ('首頁', '最新變更', '虛擬化專案'); //修改後




4、在文章內容中呼叫圖示 (Icons)

          在團隊合作或者協同作業的專案過程中,我們常常會在專案進行一段時間後便找團隊成員開會討論接下來的進度應該如何繼續進行,透過會議進行討論時團隊成員表示的意見以及其肢體動作或臉部表情,我們大略可以知道團隊成員所要表達的內容是開玩笑、生氣、正經...等,但是當團隊成員由實體的面對面溝通轉為在網站上以文字內容在 Wiki 內進行溝通時就會顯得比較生硬並且缺乏彈性了,例如 團隊成員修改了某個專案項目的內容後加註了一句玩笑話,雖然可能只是一句玩笑話但是因為團隊成員在無法面對面溝通,了解當時發文者的心境情況下,僅僅透過生硬的文字內容來進行判斷的話則有可能造成其它協同合作團隊成員可能把開玩笑當真,這種「說者無心,聽者有意」的情況就比較容易發生。

          有鑑於此,我們可以在 Wiki 文章內容中適時的加上一些圖示,藉此表達文字描述時所無法呈現的溝通效果,例如 在玩笑話的文末加上個笑臉或吐舌的圖示,相信此圖示的加入可以使團隊成員了解到那真的只是一句無心的玩笑話。

          您可以自行將屆時文章中要呼叫的圖示下載至 Wiki 主機上,並且修改 Oddmuse Wiki 主要設定檔內容,指定當 Wiki 引擎在文章內容中遇到特殊字串的表示方式時,就呼叫顯示儲存於 Wiki 主機中相對應的圖示即可,下列實作操作中將以下載 Emacswiki.org 中的哭以及微笑圖示來進行示範演練。

圖1、Emacs 圖示

          首先是下載相關圖示接著則是修改 Wiki 主要設定檔的動作,當 Wiki 主要設定檔修改完成後,以後只要在文章編輯區中有出現 *:c* 或 *:)* 特殊字串時, Wiki 引擎便會自動在文章內容中轉換為哭及微笑的圖示。
# cd /home/web/data/icons                             //切換到放置圖示的資料夾
# wget http://www.emacswiki.org/pics/smiles/smile.png //下載微笑圖示
# wget http://www.emacswiki.org/pics/smiles/cry.png   //下載哭圖示
# vi /home/web/cgi-bin/wiki.pl //修改 Wiki 主要設定檔
  %Smilies = ();               //預設值
  %Smilies = (                 //修改後
    quotemeta('*:c*')  => '/data/icons/cry.png',      //*:c* 文字呼叫 cry.png 圖示
    quotemeta('*:)*')  => '/data/icons/smile.png',    //*:)* 文字呼叫 smile.png 圖示
  ); 




5、外部連結另開新視窗

          在預設的情況下由於維基網站的精神之一是將網站內的文章相互進行連結,以便減少不必要的重複文字說明,因此只要文章內容中的連結就會視為站內的連結,因此這樣的情況若是套用在希望瀏覽者在文章中需要參考外部連結網站時便會產生困擾 (因為網站管理者總希望瀏覽者能儘量留在自已網站內)。若您希望當按下文字連結項目時並非網站內文章時是另開新頁的話,那麼您必須要修改主要設定檔的內容,此時讀者可能會問目前很多瀏覽器不就已經擁有這樣的功能了嗎?

          話雖如此,但是因為您的維基網站內容隨著時間的增長及文章數互相連接的關系一定日趨複雜,而在文章內容中若遇到需要外部連結的文章或網站時,相信網站瀏覽者無法判斷該連結為站內文章或者是外部網站,若是外連網址則網站瀏覽者點擊後將直接離開您的維基網站,若是網站瀏覽者每次都要自行採用瀏覽器另開新頁功能又會造成瀏覽者的瀏覽器充滿了過多的頁籤,此舉將造成整個網站的友善度被大大的扣分。

          因此我們可以透過修改主要設定檔內容,來達成若文章內容中有連結到外部參考網站時是另開新頁而非直接連結過去的需求,並且會在該外部網站連結文字的前後加上中括號「[]」,而站內文章的連結則無,當修改主要設定檔完成後日後在文章中,若有需要瀏覽者參考的外部網址時您可以在編輯區中使用「[網址 URL + 說明文字]」,而若是站內文章的連結則只要在編輯區中使用二個中括號加上該站內文章的項目名稱即可。

          依此次使用的 Wiki 主要設定檔內容,其修改區段約在 1159 行左右 (版本不同則行號可能有所不同),主要為在 $url, 之後加上 -target=>"_blank", 並且將 $text 修改為 "[$text]" 即可。
# vi /home/web/cgi-bin/wiki.pl
  1155 $url = UnquoteHtml ($url);
  1156 if ($images && $url =~ /^(http:|https|ftp:).+\.$ImageExtensions$/i) {
  1157    return $q->img({-src=>$url, -alt=>$url, -class=>$class});
  1158 } else {
  1159    return $q->a({-href=>$url, -class=>$class}, $text); //預設值
          return $q->a({-href=>$url, -target=>"_blank", -class=>$class}, "[$text]"); //修改後
  1160 }


          Wiki 主要設定檔修改完成後,日後若有文章內容中若有外部連結時則連結文字會顯示方框,並且點擊該連結後會另開瀏覽器新視窗,而站內文章則沒有加上方框並且點擊後直接連結過去,如下圖所示:

圖2、在維基網站中外部連結及站內文章連結的差異



6、網頁防護機制 (防止 DOS 攻擊)

          在 Oddmuse Wiki 主要設定檔中還有一項功能筆者覺得相當不錯,此 Wiki 引擎在設計上便已經具有基本的網頁阻斷服務攻擊 (Denial of Service,DOS) 的防護機制例如 阻擋砍站軟體,並且此防護機制在啟用及設定上非常容易,預設情況下此防護功能便已經啟用您可以視實際運作狀況再進行調整,以下為 Wiki 主要設定檔中阻斷服務攻擊防護機制的相關參數功能說明:
  • $SurgeProtection: 是否啟用阻擋網頁 DOS 攻擊機制 (預設值為 1),此參數數值設定為 1 則啟用DOS 防護機制 (後續二個參數設定值才有意義),若設定為 0 則表示關閉DOS 防護機制。
  • $SurgeProtectionTime: 幾秒鐘之內讀取頁面數量 (預設值為 20 秒),此參數數值意義為正常的網頁瀏覽者僅能在 20 秒內連接幾頁 Wiki 頁面,否則將不予回應連線要求。
  • $SurgeProtectionViews: 連接幾頁 Wiki 頁面 (預設值為 10 頁),此參數數值意義為正常的網頁瀏覽者僅能在限定時間內連接 10 頁 Wiki 頁面,否則將不予回應連線要求。


          當上述防止網頁 DOS 攻擊的防護機制設定完成後,表示當有惡意的網頁瀏覽者在 20 秒之內連接超過 10 頁的 Wiki 頁面資料時,也就是超過我們所設定的 DOS 防護機制時,Wiki 引擎將會自動阻擋該來源 IP 位址的網頁連線要求使其暫時無法連線,並且會在網頁上回應該網頁瀏覽者為何被 Wiki 引擎防護機制所阻擋,如果他是正常的網頁瀏覽者便知道過一段時間後再連結網站即可順利看到資料,如果是惡意瀏覽者採用的自動化工具,則會因為沒看這段警告訊息而一再嘗試抓取頁面資料而持續被Wiki 引擎防護機制所阻擋,如下圖所示:

圖3、啟用 Wiki 引擎 DOS 防護機制後惡意網頁瀏覽者暫時無法連線



7、圖片擴充模組 (Image Extension)

          在預設情況下我們只能在 Oddmuse Wiki 中呼叫本機上的圖片,並且顯示的圖片會為該圖片的實際大小,當文章內容具有多張圖片時便會產生閱讀上的困擾,若您想要在文章中顯示圖片時顯示為縮圖,而當網頁瀏覽者對於該圖片內容有興趣觀看,進而點擊該圖片時連結到指定的網址或者外連到免費圖片空間去,這樣的機制將可以有效減少網站主機,因為網頁瀏覽者在瀏覽一個具有多個圖像的文章頁面時所耗費的網路頻寬,目前筆者的個人維基也使用此方式來縮圖顯示文章中的圖片,而當網頁瀏覽者對該圖像有興趣觀看而點擊時會轉而導向連結至 Google Picasa 圖片空間去,此舉不但有效減少耗用的網路頻寬加快網頁載入速度,並且對於圖文教學的文章也增加閱讀上的舒適性。

          使用此圖片擴充模組 (Image Extension) 的方式非常輕鬆簡單,請先至 Oddmuse 官網 - Image_Extension 下載圖片擴充模組檔案 image.pl ,並存放至先前所建立的 Oddmuse Wiki 模組資料夾 “/home/web/data/modules” 內,如此一來該模組即可運作 (請記得該檔案的權限必須要讓網頁伺服器 Apache 可讀取),也就是當 Wiki引擎在文章呈現時遇到圖片擴充模組的語法就會自行依您的設定將圖片進行縮圖呈現。

          下列為圖片擴充模組的欄位說明,欄位共可分為三個小部份 [[image:URL(Preview) | Alt Text | URL(Link)]]
  • 欄位一 URL(Preview): 圖片預覽 (Preview) 功能,也就是屆時會出現在 Wiki 文章中的縮圖圖片網址。
  • 欄位二 Alt Text: 文字說明,此欄位的功能等同於是 HTML 語法的 alt="text",也就是當滑鼠移動到該縮圖圖片時會顯示此欄位中的說明文字。
  • 欄位三 URL(Link): 此欄位的網址為圖片完整大小的連結,也就是網頁瀏覽者點選縮圖圖片之後外連到實際圖片大小的網址。
圖4、圖片擴充模組運作時顯示的縮圖及文字說明



8、目錄內容擴充模組 (Table of Contents Extension)

          當 Wiki 文章中某個項目的文字內容較多時,若在閱讀此篇文章之前可以知道其目錄編排架構,相信對於網頁瀏覽者來說會增加文章閱讀便利性,此目錄內容擴充模組便是因為這樣的需求而產生的,當此目錄內容擴充模組載入時會在每篇 Wiki 文章的最開頭顯示目錄大綱,並且此目錄大綱具有書籤功能,也就是網頁瀏覽者除了可以一目了然該篇 Wiki 文章的內容架構以外,若已經熟悉該文章或者只想閱讀某個主題時更可以快速跳到想要閱讀的章節。

          使用此目錄內容擴充模組 (Table of Contents Extension) 的方式非常簡易,請先至 Oddmuse 官網 - Table_of_Contents_Extension 下載目錄內容擴充模組檔案 toc.pl ,並且存放至先前所建立的 Oddmuse Wiki 模組資料夾 “/home/web/data/modules” 內該模組即可運作 (請記得該檔案的權限必須要讓網頁服務 Apache 可讀取),也就是當 Wiki引擎在文章呈現時遇到目錄內容擴充模組的語法就會自行呈現目錄大綱。

          目錄內容擴充模組的使用方式為,當 Wiki 引擎遇到文章內容中被二個等號「==」所包起來的文字,呈現時就會視為目錄大綱例如 「== 大綱 1 ==」 及 「== 大綱2 ==」 屆時便會顯示二個目錄大綱,而若該大綱中又希望有子項目時則為「=== 大綱 1-1 ===」 及 「=== 大綱 2-1 ===」 依此類推,因此當您將 Wiki 文章編輯完成存檔後即可看到該 Wiki 頁面在文章最開頭會呈現您編排的目錄大綱。

圖5、圖片擴充模組運作時顯示的目錄大綱



9、隱藏頁面模組 (Hidden Pages Extension)

          當不同的專案在執行時不同的團隊成員能查看到的相關資料也不盡相同,若希望某些文章僅有特定的團隊成員才能閱讀文章內容時,則可以使用接下來要介紹的隱藏頁面模組來達成需求,此隱藏頁面模組的功能為將您在網站中指定「關鍵字」的文章頁面加上隱藏的功能,您可以指定誰能閱讀這些隱藏頁面 (例如 編輯者 Editor 或管理者 Admin),不過此隱藏頁面模組僅提供簡易的權限功能並無法保證您所要隱藏的頁面機密資訊擁有絕對的安全性,此模組功能的撰寫者表示若想要保證文章頁面的機密資訊擁有絕對安全性的話請建立二個維基網站進行隔離是比較理想的解決方案。

          使用此隱藏頁面模組 (Hidden Pages Extension) 的方式非常簡易,請先至 Oddmuse 官網 - Hidden_Pages_Extension 下載目錄內容擴充模組檔案 hiddenpages.pl ,並且存放至先前所建立的 Oddmuse Wiki 模組資料夾 “/home/web/data/modules” 內該模組即可運作 (請記得該檔案的權限必須要讓網頁服務 Apache 可讀取),也就是當 Wiki引擎在文章呈現時遇到隱藏頁面模組的語法就會將相對應的文章進行權限鎖定,使得非允許的團隊成員無法閱讀該文章內容。

          預設的情況下隱藏頁面模組的關鍵字為 「Hidden」,也就是說維基網站中所建立的文章頁面中,只要文章項目的最後含有 Hidden 這個關鍵字的話,那麼 Wiki 引擎則將此文章頁面視為隱藏頁面,也就是只有編輯者 Editor 或管理者 Admin 才可連結閱讀該頁面內容 (實際應用情況可進行調整),而其它一般維基使用者欲連結該隱藏頁面時會得到 「只允許管理者能看到此隱藏頁面」 的頁面顯示,下列實作中將關鍵字修改為 Password 並只允許管理者可以閱讀內容 (一般使用者及編輯者都無法閱讀該文章內容)。
# vi /home/web/data/modules/hiddenpages.pl //修改隱藏頁面模組設定檔
  $HideEditorPages = 0;          //編輯者無法閱讀隱藏頁面
  $HideAdminPages = 1;           //僅管理者才可閱讀隱藏頁面 (需通過密碼驗證)
  $HideRegExAdmin = 'Hidden$';   //預設值 (關鍵字為 Hidden)
  $HideRegExAdmin = 'Password$'; //修改後 (關鍵字為 Password)
圖6、隱藏頁面模組運作時非允許的成員將無法閱讀文章內容



10、結語

          在目前網際網路的世界裡,維基百科因為夾帶其內容自由、任何人都能參與、擁有多種語言…等特色,因而建立出一個內容完整、資料準確及中立的百科全書,若將其視野縮小至公司應用或個人使用上維基技術也是相當出色的。

          以公司應用來說,筆者在多年以前在擔任 MIS 職務時,便在企業內部架設一個公司內部專用的維基網站,而其網站內容便是公司 IT 相關事務的內容,舉凡 伺服器 IP 位址清單、伺服器功能說明、伺服器維修記錄、服務除錯記錄、電話分機設定…等,皆記錄於網基網站之中並且將互相有關系的內容進行相互連結,並且因為維基網站容易建立、修改、維護…等特色使得一個人也能勝任維護維基網站的工作。

          因此只要在企業的內部環境時不論在哪個位置, MIS 人員即可隨時查看公司 IT 相關內容,例如 廠商要來測試設備時詢問有哪些 IP 位址可以使用,您可以馬上告知並且修改維基內容將該 IP 位址項目更新為測試設備,而非利用 Ping 或 IP Scan 工具來掃描內部網段中有哪些 IP 位址能用,又或者在維修使用者電腦時需要查詢伺服器相關資訊時只要利用使用者的瀏覽器,登入內部維基網站即可馬上查詢相關資訊而不用回到自已的座位才能查詢,同時導入維基也可以改善過去 MIS 人員利用 Word、Excel、筆記本…來記錄 IT 事務,造成檔案內容無法統一或者有人修改檔案內容但不知變動了什麼以及跟之前版本的差異,又或者想維護文件內容時因為電腦沒安裝相關文件軟體而作罷。

          猶記當時筆者在一家外商公司擔任 MIS 職務掌管公司所有 IT 事務,由於平常已經將公司所有 IT 相關事務記錄於內部維基網站內,並且除了維基本身的密碼驗證機制之外還加上網頁伺服器的保護技術 (畢竟公司的 IT 資訊是重要機密),因此當筆者因為生涯規劃要離開該職務時,總經理特別請美國總公司派來一位資深 IT 人員來了解及接管台灣分公司這裡的 IT 事務,並且預計了長達一週的交接時間,而就在筆者打開內部維基網站並且向總公司的資深 IT 人員進行說明後,該交接時間就由原本的一週縮短至 2 小時,當然在離開前也得到了總經理以及該資深 IT 人員的認可。

          基本上每個人的管理方式各有不同,然而筆者認為「工欲善其事,必先利其器」好的工具可以讓您省力不少,因此筆者介紹了一套使用多年且非常優秀的的 Wiki 引擎 Oddmuse 給大家,因為此套 Wiki 引擎採用單一設定檔的「單純性」,以及不需要資料庫便可運作「便利性」,最後則是模組化設計的「擴充性」,使得筆者在個人維基的使用上也是採用它,希望透過這二篇文章的介紹可以讓讀者在很快的時間內便可以建立屬於自已的維基網站。