工事中
PukiwikiのURLを静的なURLでアクセスできるように改造しました. 一般に,SEOとして行われているものです. 実際のところどうなのか分かりませんが,Googleは ? や & が含まれているページをインデックス化しないという情報がありますので,改造してみました. 単にURLが気にくわなかっただけというのも理由ですが...
実際には,Pukiwikiだけの改造で対処するのではありません.Apacheのモジュールのmod_rewriteを使って,CGI風のURLを*.htmlの形に書き換えて,Pukiwikiに渡すようにしました.
以下のページを参考にしています.
mod_rewriteを設定します.
.htaccess や,Apacheの設定ファイル(http.conf, Gento Linuxの場合はapache.conf) の<Directory>ディレクティブに以下の内容を記述します.
Options FollowSymLinks RewriteEngine on RewriteOptions MaxRedirects=1 RewriteBase /pukiwiki/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)\.html$ index.php?$1 [L]
Apache が,2.0系でないと,ページを階層化している場合に問題が起きます. %2F(/)が含まれていると,mod_rewrite が全くききません. 設定で,
AllowEncodedSlashes On
としないとなりませんが,このディレクティブは,2.0以降にしか存在しません.
使ったのは,Pukiwiki 1.4.5 です.
これだけでは,Pukiwikiが生成するリンクは,CGI風のままですので,リンクを生成している部分を改造します.
lib/make_link.php の 576行目あたりに,Link_bracketname クラスの toString がありますので,その内容を次のように書き換えます.
改造前
function toString() { return = make_pagelink( $this->name, $this->alias, $this->anchor, $this->page ); }
改造後
function toString() { $link_result = make_pagelink( $this->name, $this->alias, $this->anchor, $this->page ); $link_result = preg_replace("/index\.php\?(.*)\" title=/", "$1.html\" title=", $link_result); return $link_result; }
54行あたりで,トップページのURLを生成する部分があります.メニューでトップページへのリンクを生成していますので,ここも書き換えます
改造前
$_LINK['top'] = "$script?" . rawurlencode($defaultpage);
改造後
$_LINK['top'] = rawurlencode($defaultpage) . ".html";
ls2 プラグインは,また別の仕組みでURLを作っていますので,そこも改造します.
改造前 126行目
$href = $script . '?cmd=read&page=' . $r_page;
改造後
$href = $r_page."html";
recent プラグインも同じようにします
改造前 55行目付近
if($page == $vars['page']) { // No need to link itself, notifies where you just read $items .= " <li><span title=\"$s_page $pg_passage\">$s_page</span></li>\n"; } else { $items .= " <li><a href=\"$script?$r_page\" title=\"$s_page $pg_passage\">$s_page</a></li>\n"; }
改造後
if($page == $vars['page']) { // No need to link itself, notifies where you just read $items .= " <li><span title=\"$s_page $pg_passage\">$s_page</span></li>\n"; } else { $items .= " <li><a href=\"$r_page.html\" title=\"$s_page $pg_passage\">$s_page</a></li>\n"; }
私が必要だったのは当面これだけでしたので,他にどれだけURLを生成している箇所があるのかは探していません. ただ,改造していなくてもURLが元のままになるだけで,動作には問題ないと思います.
最後にお約束の注意です.この改造の結果に,私は責任をもてませんので,自己責任でお願いします.