Ruby で書かれた Wiki クローン Hiki をより便利に使うための Tips を書いてみました.
自分が使うのに便利なものを集めただけなので,万人受けしないかもしれませんが 参考にしてください.Hiki 本体で対応したら,このページからは消えると 思います.
URL をかっこよく
CGI の引数としてページ名を表示するのはいまいちかっこよくないですよね. ということで,「/hiki.cgi?WikiName」という形ではなく,「/WikiName」で アクセスできるように変更してみました.これをやるには,apache の mod_rewirte を利用します.
ページ名.html で閲覧してもらう方法 が,Hiki のオフィシャルサイトにありますが,まぁ,同じことですね. ただ,あちらのやりかただと,ひっかかってほしくないものまでひっかかって しまいますから,好ましくないと思います.こっちのやりかたも 問題点がありますが…(修正しました).
Rewrite Rule
以下のような Rewrite Rule を .htaccess か httpd.conf に記述します. /hiki/ など,ディレクトリパスの部分はそれぞれの環境にあわせて書き直して ください.
RewriteEngine On RewriteBase /hiki/ RewriteRule ^([^/\?]*)$ $1 [C] RewriteCond /path/to/hiki/data/text/$1 -f RewriteRule ^(.*)$ hiki.cgi?$1 [L]
簡単に解説します.まず,RewriteBase で hiki の設置してあるパスの ディレクトリを指定します.そして,RewriteRule で,ファイル名を抜き出し ます.「/」と「?」を省いているのは,ディレクトリをのぞくということと, hiki.cgi Rewrite を連続して行わないようにするためです. そして,hiki は,WikiName と同名のテキストファイルを作成するので,hiki の データを置くディレクトリ内の同名ファイルの存在を調べます.ファイルが 存在していたときは hiki を通してページを表示するようにし,存在しなければ, そのままの形で渡します(Not Found を返します,ふつうは).ここでその ファイルが存在していればそちらを表示します.
リンクの修正
これだけだと,Hiki 内部でリンクをたどったときは,前のかっこわるい URL にアクセスしてしまうので,Hiki のコードをいじってリンクをきちんと出す ようにします.
この設定は,plugin/00default.rb にあるので,メインのコードに手を出さなく とも,かんたんに修正できます.debian を利用してインストールした場合は, このファイルは symlink になっていますので,直接変更せずに,新たな プラグインとしてしまいましょう.
以下の内容を hikianchor.rb として plugin ディレクトリに置いてください.
#===== hiki_url
def hiki_url(page)
"#{page.escape}"
end
#===== hiki_anchor
def hiki_anchor( page, display_text )
make_anchor("#{page}", display_text)
end
これで,00default.rb の定義は hikianchor.rb の定義で置き換えられますから, 望みどおりの動作をさせることができます.
問題点
- 更新メールの URL は元のまま.hiki/util.rb をさわらないといけないので, deb を入れてる場合は root で変更しないといけない.アップグレードすると 戻ってしまう.メソッドの override するという手はあるけど….
Wiki ページの URL を漏らしたくない.
Wiki ページを自分のプライベートページに利用している方は多いと思います. このとき,自サイト以外のページへリンクを張ってしまうと,ブラウザが Referer としてそのページの URL を送信してしまいます.すると, プライベートページの URL がバレてしまいます.
そこで,こういったページからは リンク元を知られないようにするために で紹介したような方法でリンクを張って,URL を知られないようにする 必要があります.しかし,Wiki でリンクを書くときに毎回このように 書き足すのは面倒です.そこで,外部リンクにはすべて特定の文字列を 追加してアンカーにするように変更してやります.
この定義は例によって plugin/00default.rb にありますので,以下の 内容を先ほどの hikianchor.rb に追記してください. go.to.arege.jp のところはこのままでもいいですが, 適当に書き換えてください.じゃないと,ぼくに URL がバレてしまいます.:)
#===== make_anchor
def make_anchor(url, display_text)
if ( %r!^\w+://! =~ url )
%Q!<a href="http://go.to.arege.jp/#{url}">#{display_text}</a>!
else
%Q!<a href="#{url}">#{display_text}</a>!
end
end
URL に http:// や ftp:// などのスキームが書かれている場合のみ, go.to.arege.jp つきで URL を表示します.