您在這裡

製作站內連結:模組介紹pathologic

Ryneh's 的頭像
Ryneh 在 2011-10-25 (二) 10:41 發表

來分享一個我昨天遇到的問題,很基本,但是出乎意料地花了我不少時間。

我的網站是類似「知識庫」的形式,所以文章和文章之間會有許多連結,利用網頁的超連結的功能來呈現各個主題彼此的關連。『超連結?有什麼難的!用WYSIWYG編輯器就可以搞定啦。』我一開始是這樣想的。(順帶一題,我用的是 WYSIWYG模組+ckeditor編輯器)

昨天突然熊熊想到,站內的連結應該要用「相對路徑」才對啊!不然萬一網站要搬家的話(其實是一定會搬,因為我現在是在內部的測試主機架設),不是所有連結都要修改了。還好現在網站還在測試,文章不多,趕緊手動改一改就是了。沒想到,改起來還真不簡單啊。

在ckeditor裡,做超連結有幾個選項:通訊協定裡可以選(有相關的)的,有 http:// 和 其他 兩個,URL 可以打的,我想得到的有「node/14」和「/node/14」(差一個斜線)兩種可能。大家在看下去之前,不妨先猜猜哪一個組合是對的。

結論是:通通都不對啊!!!

我測試的結果,通訊協定應該要用「其他」才對。但URL怎麼打都不對。我的網站架在 http://192.168.0.111/drupal
如果URL打「node/14」,會連到 http://192.168.0.111/drupal/node/node/14 => 當然找不到東西。(node重複了)
如果URL打「/node/14」,會連到 http://192.168.0.111/node/14 => 當然也是沒東西。(少了drupal)
要能夠正確連結,URL要打「14」,但這個URL顯然不合理。

於是我展開了漫長的 google 過程,過程就不細講了。找到看起來比較相關的,是修改 setting.php 裡的 $base_url ,和 .htaccess 裡的 RewriteBase 這兩個設定。他們兩個原本都是被註解掉的,所以我想說設定好之後應該就可以用了。

才沒這回事呢!!!

最後我快要抓狂的時候才想到,如果真的是 base url 或 rewrite base 的設定問題,那早該出問題了。menu 裡用的不都是相對路徑?於是我做了一個測試用的 menu 項目,連到「node/14」。嘿,可以用。所以我的理解是:在做超連結的時候,drupal 並不會像處理 menu item 一樣先處理過,所以就會出現錯誤。知道問題之後就簡單啦,搜尋過後找到了一個模組可以處理:pathologic。

這個模組很簡單,其實就是一個 filter,安裝設定都沒什麼好說的。他的功能就是把「內部連結」轉換成絕對路徑。他強大的地方是,可以自己設定什麼是「內部連結」。以我的例子來說,只要連結不是「http」開頭就是內部連結。但如果一個網站在「www.example.com」要搬家到「www.newsite.net」,而之前的連結都用的是絕對路徑,那就可以把「www.example.com」也設定成「內部連結」的一種,讓 filter 來幫忙處理搬家之後連結會出現錯誤的問題。