2008/11時点でのYakiBikiは、デフォルトではPermalinkをサポートしていません。 これはmod_rewrite相当の機能が搭載されていないWebサーバーでも実行できるようにするために、やむなく断念しました。((実は0.0.1のalpha-2の時点ではviewやrawモジュールに対しpermalinkになるような.htaccessが添付されていた・・・が、alpha-2ではmod_rewriteを前提にしてしまっていた。IISどうするよとか、mod_rewriteがたまたま入ってないWeb鯖上で実行したい時どうするよとか考え出した結果、mod_rewriteによるpermalinkは実装しないことにalpha-3では変更した。)) ですが折角mod_rewrite相当の機能が搭載されているのであれば、使いたいよね・・・ということで、早速自分で調整してみました。 #outline|| ---- * 1. とりあえず.htaccessを修正する。 .htaccessにこんな感じのmod_rewriteの設定を付け足しました。 #pre||> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule .* - [L] RewriteRule ^$ index.php [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f # view mode RewriteRule ^view\/([0-9]+)$ index.php?mdl=view&id=$1 [L] RewriteRule ^view\/([0-9]+)\/$ index.php?mdl=view&id=$1 [L] RewriteRule ^(.*)$ index.php [QSA,L] ||< viewモジュール・・・つまり通常のページ詳細表示の場合だけに対応を絞り込みました。YakiBiki内での「記事へのリンク」は通常、viewモジュールへのリンクになるからです。 この段階でURLから ".../view/10" とかしたりして、ちゃんと表示されるか確認してみます。 * 2. URL生成のカスタマイズフックを作成 yakibikiの plugins/hook ディレクトリに yb_hook_make_url.php というのがありますが、これがYakiBiki内のURLを生成する関数のデフォルト実装です。 plugins/hook 以下にはユーザが挙動をカスタマイズ出来るようなフックポイントを置く・・・筈なのですが、2008/11時点の 0.0.1-alpha3 時点ではまだこれ1つだけなんです・・・。 とまれ、まずはこれをコピーし、適当な名前にします。今回であれば yb_hook_my_make_url.php とします。 続いてyb_hook_my_make_url.phpの中の関数名を直します。 function yb_hook_make_url() → function yb_hook_my_make_url() 細かいコードの説明は省きますが、コピーした方で関数からreturnする直前を次のように修正します。 【修正前】 #pre||> if (count($_params) > 0) { $base .= $_query; } return $base; ||< 【修正後】 #pre||> if (count($_params) > 0) { $base .= $_query; } // ここのifブロックを挿入 if ($module == 'view') { if (isset($query_params['id']) && is_numeric($query_params['id'])) { $base = _YB('url') . 'view/' . $query_params['id']; } } return $base; ||< * 3. config.phpを修正してフックを付け替える。 追加した新しいmy_make_urlフックに付け替えるには、config.phpに以下の行を付け足します。 _YB('hook.convert.make_url', 'my_make_url'); 少し解説します。フックを使用する場合、次のようにyb_Util::hook()を実行します。(2008/11, 0.0.1-alpha3時点) $ret = yb_Util::hook('フック名', $args); ここで _YB('hook.convert.フック名') が指定されていない場合、 plugins/hook/yb_hook_フック名.php をロードして、 yb_hook_フック名() を実行します。 もしも _YB('hook.convert.フック名') が指定されていて、'my_フック名'となっていれば、 plugins/hook/yb_hook_my_フック名.php をロードして、 yb_hook_my_フック名() を実行します。 この仕掛けを使用して、''YakiBikiのデフォルト実装を残したまま''、ユーザーのカスタマイズフックを有効化できます。 以上でviewモードについてはPermalinkを作る事が出来ました。YakiBikiは内部リンクについては全て動的に生成していますのでWikiキャッシュの影響はありません(=キャッシュクリアは不要)。