![]() |
![]() |
静的URLに改造する†工事中 PukiwikiのURLを静的なURLでアクセスできるように改造しました. 一般に,SEOとして行われているものです. 実際のところどうなのか分かりませんが,Googleは ? や & が含まれているページをインデックス化しないという情報がありますので,改造してみました. 単にURLが気にくわなかっただけというのも理由ですが... 実際には,Pukiwikiだけの改造で対処するのではありません.Apacheのモジュールのmod_rewriteを使って,CGI風のURLを*.htmlの形に書き換えて,Pukiwikiに渡すようにしました. 以下のページを参考にしています. Apacheの設定†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の改造†使ったのは,Pukiwiki 1.4.5 です. これだけでは,Pukiwikiが生成するリンクは,CGI風のままですので,リンクを生成している部分を改造します. lib/make_link.php†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;
}
lib/html.php†54行あたりで,トップページのURLを生成する部分があります.メニューでトップページへのリンクを生成していますので,ここも書き換えます 改造前 $_LINK['top'] = "$script?" . rawurlencode($defaultpage); 改造後 $_LINK['top'] = rawurlencode($defaultpage) . ".html"; plugin/ls2.inc.php†ls2 プラグインは,また別の仕組みでURLを作っていますので,そこも改造します. 改造前 126行目 $href = $script . '?cmd=read&page=' . $r_page; 改造後 $href = $r_page."html"; plugin/recent.inc.php†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が元のままになるだけで,動作には問題ないと思います. 注意†最後にお約束の注意です.この改造の結果に,私は責任をもてませんので,自己責任でお願いします. |
|
Last-modified: 2005-02-14 (月) 06:35:18
|