PATH_INFOを使う†実際のところどうなのか分かりませんが,Googleは ? や & が含まれているページをインデックス化しないという話を聞きます. ついでにURLをシンプルにしたいと思っていたので,PATH_INFOを使って,? や,& が含まれないURLを使用できるようにしてみました. 最初は,「server/PukiWiki/静的URLに改造する」 の方法でやろうとしたのですが,Apache を 2.0 以上にして設定を変えないとうまくいかないので,やめにしました. 作業に当たって,次のページを参考にしました. 使った PukiWikiのバージョンは,1.4.5 です. lib/init.php†次の箇所を // 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'])) lib/make_link.php†このページ(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 . ".html" . $anchor . '"' . $title . '>' . $s_alias . '</a>'; 最後が".html"で終わるようにしたので,私の場合はこのようにしてます.他の箇所も同じように修正しています. lib/html.php†このページ(PukiWiki with PATH_INFO - wiki@nothing)を参考に修正します.(末尾に.htmlをつける場合は適宜修正の必要があります) 加えて,236行目あたりの make_related で,以下の箇所を探して, $_links[] = $tag ? '<a href="' . $script . '?' . $r_page . '" title="' . $s_page . ' ' . $passage . '">' . $s_page . '</a>' : '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>' . $passage; 次のように変更します $_links[] = $tag ? '<a href="' . $script . '/' . $r_page . ".html" . '" title="' . $s_page . ' ' . $passage . '">' . $s_page . '</a>' : '<a href="' . $script . '/' . $r_page . ".html" . '">' . $s_page . '</a>' . $passage; lib/func.php†ページ一覧のリンクを生成している部分を探して変更します. 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; plugin の改造†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/'); |
Last-modified: 2005-02-14 (月) 18:57:18
|