pukiwikiで存在しないページへのアクセスを404にする
read.inc.phpの改修
Pukiwikiのデフォルトでは存在しないページにアクセスされた場合はnewpageプラグインが作動してそのタイトル名の新しいページを作成する画面に遷移してしまう。これを避けるために、plugin/read.inc.phpに対して下記の工夫を行った。" } else if (is_pagename($page)) { "の下にある2行を削除する。
$vars['cmd'] = 'edit'; //この行を削除
return do_plugin_action('edit'); //この行を削除
さらに、そのあとに6行を追加する。
header('HTTP/1.0 404 Not Found');
return array(
'msg'=>'NOT FOUND',
'body'=>str_replace('$1', "/?cmd=edit&page=$page",
str_replace('$2', "../", $_msg_notfound))
);
Pukiwiki 1.5.3から導入されたautoaliasへの対応
Pukiwiki 1.5.2から1.5.3になるときにautoaliasの機能が追加されて、read.inc.phpにも変更が加えられている。このために上記の変更だけではページを編集すると画面が真っ白になるという現症が発生する。
autoaliasの機能を使用しない場合は、plugin/read.inc.phpの 「if ($autoalias)」の一節(25〜37行目)を全てコメントアウトしておいても良さそうだが、autoaliasの機能を殺さないようにするためには下記の改修が必要かと思われる。
しかし、これをしても添付ファイルを削除しようとすると削除画面まではいけるがファイルが削除できないという減少が発生する。色々と試行錯誤してみたが、原因が特定できないエラーが出るたびにサーバーに非常に負荷がかかり、ついにはレンタルサーバー会社から過負荷でアカウント停止の警告が来る寸前にまで達した。
やむなくplugin/read.inc.phpとplugin/newpage.inc.phpを初期状態のpukiwiki 1.5.3のものに戻して「pukiwikiで存在しないページへのアクセスを404にする」を断念した。下記のif($autoalias)付近を順番に削ってゆくとエラーが消えるので、autoalias周りの何らかの機能と干渉していることははっきりしている。
変更前(25〜37行目)
if ($autoalias) {
$real = get_autoalias_right_link($page);
if ($real != '') {
if (is_page($real)) {
$uri = get_page_uri($real, PKWK_URI_ROOT);
} else {
$uri = get_base_uri(PKWK_URI_ROOT) . '?cmd=edit&page=' . rawurlencode($real);
}
header('HTTP/1.0 302 Found');
header('Location: ' . $uri);
return;
}
}
変更後(25〜44行目)
if ($autoalias) {
$real = get_autoalias_right_link($page);
if ($real != '') {
if (is_page($real)) {
$uri = get_page_uri($real, PKWK_URI_ROOT);
} else {
$uri = get_base_uri(PKWK_URI_ROOT) . '?cmd=edit&page=' . rawurlencode($real);
}
header('HTTP/1.0 302 Found');
header('Location: ' . $uri);
return;
}
} else {
header('HTTP/1.0 404 Not Found');
return array(
'msg'=>'NOT FOUND',
'body'=>str_replace('$1', "/?cmd=edit&page=$page",
str_replace('$2', "../", $_msg_notfound))
);
}
newpage.inc.phpの改修
これだけだとnewpageを作ろうとした時も存在しないページと判定されてしまって編集画面に入れないので、plugin/newpage.inc.phpも以下のように変更する。つまり、newpage変種画面にcmd=readではなくcmd=editで入るように設定する。
pkwk_headers_sent();
header('Location: ' . get_base_uri(PKWK_URI_ROOT) . '?cmd=read&page=' . $r_page . '&refer=' . $r_refer); //変更前
pkwk_headers_sent();
header('Location: ' . get_base_uri(PKWK_URI_ROOT) . '?cmd=edit&page=' . $r_page . '&refer=' . $r_refer); //変更後
この記事に対するコメント
このページには、まだコメントはありません。
更新日:2020-05-02 閲覧数:1508 views.