[[Pukiwiki]]
*静的URLに改造する [#vfe80387]
&color(red){工事中};
PukiwikiのURLを静的なURLでアクセスできるように改造しました.
一般に,SEOとして行われているものです.
実際のところどうなのか分かりませんが,Googleは ? や & が含まれているページをインデックス化しないという情報がありますので,改造してみました.
&size(9){単にURLが気にくわなかっただけというのも理由ですが...};
実際には,Pukiwikiだけの改造で対処するのではありません.Apacheのモジュールのmod_rewriteを使って,CGI風のURLを*.htmlの形に書き換えて,Pukiwikiに渡すようにしました.
&aname(test);
以下のページを参考にしています.
-[[PukiWiki静的URL改造 - 南天dub:http://tfs.s41.xrea.com/pukiwiki.php?PukiWiki%C0%C5%C5%AAURL%B2%FE%C2%A4]]
-[[PukiWiki/改造/静的コンテンツに偽装/ページ - cubic9.com:http://cubic9.com/PukiWiki/%B2%FE%C2%A4/%C0%C5%C5%AA%A5%B3%A5%F3%A5%C6%A5%F3%A5%C4%A4%CB%B5%B6%C1%F5/%A5%DA%A1%BC%A5%B8/]]
* Apacheの設定 [#lbeb36f8]
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の改造 [#me6fc259]
使ったのは,Pukiwiki 1.4.5 です.
これだけでは,Pukiwikiが生成するリンクは,CGI風のままですので,リンクを生成している部分を改造します.
** lib/make_link.php [#tbd39415]
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 [#x043fea9]
54行あたりで,トップページのURLを生成する部分があります.メニューでトップページへのリンクを生成していますので,ここも書き換えます
改造前
$_LINK['top'] = "$script?" . rawurlencode($defaultpage);
改造後
$_LINK['top'] = rawurlencode($defaultpage) . ".html";
** plugin/ls2.inc.php [#p94ffefb]
ls2 プラグインは,また別の仕組みでURLを作っていますので,そこも改造します.
改造前 126行目
$href = $script . '?cmd=read&page=' . $r_page;
改造後
$href = $r_page."html";
** plugin/recent.inc.php [#ia00be7c]
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が元のままになるだけで,動作には問題ないと思います.
* 注意 [#td2b4062]
最後にお約束の注意です.この改造の結果に,私は責任をもてませんので,自己責任でお願いします.