Top/PukiWiki/改造/ページがないときは404を出力

ページがないときは404を出力はてなブックマーク

存在しないページが閲覧されたとき*1は、レスポンスヘッダに404を出力します。

注意

  • PukiWiki本来の動作からは外れます。
    本来は存在しないページが閲覧されると編集フォームに移動するようになっていますが、
    このパッチを当てるとエラーページが出力されるようになります。 *2
  • 一部、ページをディレクトリに偽装が前提を前提にしている部分があります。

パッチ (PukiWiki1.4.4)

--- plugin/read.inc.php.orig	2004-08-04 22:43:23.000000000 +0900
+++ plugin/read.inc.php	2004-10-26 17:44:14.000000000 +0900
@@ -8,7 +8,7 @@
 
 function plugin_read_action()
 {
-	global $vars, $_title_invalidwn, $_msg_invalidiwn;
+	global $vars, $_title_invalidwn, $_msg_invalidiwn, $_msg_notfound;
 
 	$page = isset($vars['page']) ? $vars['page'] : '';
 
@@ -22,8 +22,12 @@
 		return do_plugin_action('interwiki'); // InterWikiNameを処理
 
 	} else if (is_pagename($page)) {
-		$vars['cmd'] = 'edit';
-		return do_plugin_action('edit'); // 存在しないので、編集フォームを表示
+		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))
+		);
 
 	} else {
 		// 無効なページ名
--- plugin/newpage.inc.php.orig	2004-07-31 12:09:20.000000000 +0900
+++ plugin/newpage.inc.php	2004-10-26 17:43:18.000000000 +0900
@@ -43,7 +43,7 @@
 		get_fullname($page,$vars['refer']) : $page);
 	$r_refer = rawurlencode($vars['refer']);
 
-	header("Location: $script?cmd=read&page=$r_page&refer=$r_refer");
+	header("Location: $script?cmd=edit&page=$r_page&refer=$r_refer");
 	die();
 }
 ?>
--- ja.lng.orig	2004-04-04 00:27:07.000000000 +0900
+++ ja.lng	2004-10-26 17:23:12.000000000 +0900
@@ -32,7 +32,7 @@
 確認後、[ページの更新]を押してください。<br />';
 $_msg_invalidiwn = '$1 は有効な $2 ではありません。';
 $_msg_invalidpass = 'パスワードが間違っています。';
-$_msg_notfound = '指定されたページは見つかりませんでした。';
+$_msg_notfound = '指定されたページは見つかりませんでした。<br /><a href="$1">編集</a>するか、<a href="$2">親ディレクトリ</a>にアクセスしてみて下さい。';
 $_msg_addline = '追加された行は<span class="diff_added">この色</span>です。';
 $_msg_delline = '削除された行は<span class="diff_removed">この色</span>です。';
 $_msg_goto = '$1 へ行く。';

パッチの理由

Googleのキャッシュが消えない原因はこれではないかと思ったので、
場当たり的に修正しました。というか、このサイトの内容は全て場当たり的です :p

Amazon

*1 cmd=read または ?hoge での閲覧時
*2 PukiWiki上の未編集のWikiNameやBracketNameへの引数はcmd=readではなく、cmd=editなので、使用上は問題ないと考えています。
差分 一覧