実際のところどうなのか分かりませんが,Googleは ? や & が含まれているページをインデックス化しないという話を聞きます. ついでにURLをシンプルにしたいと思っていたので,PATH_INFOを使って,? や,& が含まれないURLを使用できるようにしてみました.
最初は,「server/PukiWiki/静的URLに改造する」 の方法でやろうとしたのですが,Apache を 2.0 以上にして設定を変えないとうまくいかないので,やめにしました.
作業に当たって,次のページを参考にしました.
使った PukiWikiのバージョンは,1.4.5 です.
次の箇所を
// QUERY_STRINGを取得 if (array_key_exists('QUERY_STRING',$_SERVER) and $_SERVER['QUERY_STRING'] != '') { $arg = $_SERVER['QUERY_STRING']; } else if (array_key_exists('argv',$_SERVER) and count($_SERVER['argv']))
このように変更
} else if (array_key_exists('PATH_INFO',$_SERVER) and $_SERVER['PATH_INFO'] != '') { $arg = preg_replace("/^\/*(.+)\/*$/","$1",$_SERVER['PATH_INFO']); } else if (array_key_exists('argv',$_SERVER) and count($_SERVER['argv']))
ただ,私は最後が".html"で終わるようにしてみたかったので, さらに,このように変更してみました.
} else if (array_key_exists('PATH_INFO',$_SERVER) and $_SERVER['PATH_INFO'] != '') { $arg = preg_replace("/^\/*(.+)\.html\/*$/","$1",$_SERVER['PATH_INFO']); } else if (array_key_exists('argv',$_SERVER) and count($_SERVER['argv']))
このページ(PukiWiki with PATH_INFO - wiki@nothing)を参考に修正します.
それに加えて,make_pagelink関数の中の以下の箇所を探し出して,
return '<a href="' . $script . '?' . $r_page . $anchor . '"' . $title . '>' . $s_alias . '</a>';
以下のように変更します
return '<a href="' . $script . '/' . $r_page . $anchor . '"' . $title . '>' . $s_alias . '</a>';
最後が".html"で終わるようにしたので,私の場合はこのようにしてます.他の箇所も同じように修正しています.
return '<a href="' . $script . '/' . $r_page . ".html" . $anchor . '"' . $title . '>' . $s_alias . '</a>';
このページ(PukiWiki with PATH_INFO - wiki@nothing)を参考に修正します.
ページ一覧のリンクを生成している部分を探して変更します. page_list 関数の中の,291行付近にある以下の箇所を
$r_page = rawurlencode($page);
次にように変更します
$r_page = rurlencode($page);
また,293行目付近の以下の箇所を
$str = ' <li><a href="' . $script . '?cmd=' . $cmd . '&page=' . $r_pag e . '">' . $s_page . '</a>' . $passage;
次のように変更します
$str = ' <li><a href="' . $script . '/' . $r_page. '.html?cmd=' . $cmd . '">' . $s_page . '</a>' . $passage;
これでも十分ですが,私の場合,cmdがreadだった場合は,単に.htmlで終わるURLにしたかったので,さらにこうしています.
if($cmd == 'read'){ $cmdarg = ''; } else { $cmdarg = '?cmd='. $cmd; } $str = ' <li><a href="' . $script . '/' . $r_page. '.html' . $cmdarg . '">' . $s_page . '</a>' . $passage;
URLを生成するplugin を修正します.たとえば,ls2, recent などがあります.
ls2の場合は plugin/ls2.inc.php の 123行目あたりにある次の箇所を
$r_page = rawurlencode($page);
次のように変更しました.
$r_page = rurlencode($page);
また,126行目付近にある次の箇所を
$href = $script . '?cmd=read&page=' . $r_page;
次のように変更しました
$href = $script . '/' . $r_page . ".html";
必要に応じて,他のプラグインにも変更を加えます.
PATH_INFO を使うと,URL が http://isolinear.info/wiki/index.php/FrontPage の用になります. そのため,相対パスで,CSSファイルや画像ファイルを指定している場合,パスの指す場所がずれてしまいます.
スキンで,CSSファイルや,画像ファイルを直に指定している場合は,絶対パスで書き直す必要があります.
pukiwiki.ini.php で IMAGE_DIR を絶対パスで指定する必要があります.理由はスキンと同じです.
define('IMAGE_DIR', 'http://isolinear.info/wiki/image/');