![]() |
![]() |
[[server/PukiWiki]]
*PATH_INFOを使う [#l8ff4243]
実際のところどうなのか分かりませんが,Googleは ? や & が含まれているページをインデックス化しないという話を聞きます.
ついでにURLをシンプルにしたいと思っていたので,PATH_INFOを使って,? や,& が含まれないURLを使用できるようにしてみました.
最初は,「[[server/PukiWiki/静的URLに改造する]]」 の方法でやろうとしたのですが,Apache を 2.0 以上にして設定を変えないとうまくいかないので,やめにしました.
作業に当たって,次のページを参考にしました.
- [[PukiWiki with PATH_INFO - wiki@nothing:http://wiki.nothing.sh/page/PukiWiki%20with%20PATH_INFO]]
使った PukiWikiのバージョンは,1.4.5 です.
** lib/init.php [#t9f04442]
次の箇所を
// 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 [#e2ebf017]
このページ([[PukiWiki with PATH_INFO - wiki@nothing:http://wiki.nothing.sh/page/PukiWiki%20with%20PATH_INFO]])を参考に修正します.
それに加えて,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 [#k9a02e77]
このページ([[PukiWiki with PATH_INFO - wiki@nothing:http://wiki.nothing.sh/page/PukiWiki%20with%20PATH_INFO]])を参考に修正します.(末尾に.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 [#k9a02e77]
ページ一覧のリンクを生成している部分を探して変更します.
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 の改造 [#s08f1182]
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";
必要に応じて,他のプラグインにも変更を加えます.
** スキンの改造 [#k0fd606e]
PATH_INFO を使うと,URL が http://isolinear.info/wiki/index.php/FrontPage の用になります.
そのため,相対パスで,CSSファイルや画像ファイルを指定している場合,パスの指す場所がずれてしまいます.
スキンで,CSSファイルや,画像ファイルを直に指定している場合は,絶対パスで書き直す必要があります.
** 設定の変更 [#l533a78f]
pukiwiki.ini.php で IMAGE_DIR を絶対パスで指定する必要があります.理由はスキンと同じです.
define('IMAGE_DIR', 'http://isolinear.info/wiki/image/');