静的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
|