PHPで作る『ちょっと便利で優しい404ページ』

アドレスバーに直接URLを打ち込んで移動すると、タイプミスで間違ったページへ移動してしまい「404 Not Foundが表示された」なんて言う経験、ありますよね?

そんな時でも安心な、ちょっと便利で優しい404ページを作ってみたいと思います。

概要・必須条件

「ちょっと便利で優しい404ページ」とは、予めサイト内のURLリストを書き出しておき、間違って入力されたURLと比較して、もっとも近い実在URLを返す404ページです。

以下、必須条件。

  • PHPが使用可能
  • 404ページを好きなページに出来る
  • URLを書き出す [スクリプト or 根気]

各ファイルのソースコード

url_list.php

<?php
$urlList = array(
    'ページのURL',
    'ページのURL',
    'ページのURL',
);

// 例
$urlList = array(
    '/php_mysql/',
    '/javascript/',
    '/mt/',
);

例のように、 'ページのURL', の行をコピーしてサイト全体のURLを記述する。
(http://で始まる絶対パスより、/で始まる絶対パスの方が速くて精度が高いです)

404.php

<?php
// URLリスト読み込み
require 'url_list.php';

/**
 * 以下の処理の詳しい説明はマニュアルを参照してください
 * http://php.benscom.com/manual/ja/function.levenshtein.php
 */
$shortest = -1;

foreach ($urlList as $val) {
	$lev = levenshtein($_SERVER['REQUEST_URI'], $val);
	if ($lev === 0) {
		$url = $val;
		$shortest = 0;
		break;
	}
	if ($lev <= $shortest || $shortest < 0) {
		$url = $val;
		$shortest = $lev;
	}
}
?>
<!-- ヘッダー -->
<h1>404 指定されたページは存在しません</h1>
<h2>もしかして</h2>
<p>お探しのページは <a href="<?php echo $url; ?>"><?php echo $url; ?></a>ではありませんか?</p>
<!-- フッター -->

24行目以下は自由に変更して下さい。
(26行目 <?php echo $url; ?> を変更する場合は気を付けて下さい)。

実在URLと一緒にページのタイトルも表示

url_list_v2.php

<?php
$urlList = array(
    'ページのURL' => 'ページのタイトル',
    'ページのURL' => 'ページのタイトル',
    'ページのURL' => 'ページのタイトル',
);

// 例
$urlList = array(
    '/php_mysql/' => 'PHP/MySQL',
    '/javascript/' => 'JavaScript',
    '/mt/' => 'Movable Type',
);

'ページのURL' と行末の,(カンマ)の間に => 'ページのタイトル' を追加する。

404.php

<?php
// URLリスト Ver.2 読み込み
require 'url_list_v2.php';

/**
 * 以下、色々処理
 */
$shortest = -1;

foreach ($urlList as $key => $val) {
	$lev = levenshtein($_SERVER['REQUEST_URI'], $key);
	if ($lev === 0) {
		$url   = $key;
		$title = $val;
		$shortest = 0;
		break;
	}
	if ($lev <= $shortest || $shortest < 0) {
		$url   = $key;
		$title = $val;
		$shortest = $lev;
	}
}
?>
<!-- ヘッダー -->
<h1>404 指定されたページは存在しません</h1>
<h2>もしかして</h2>
<p>お探しのページは <a href="<?php echo $url; ?>"><?php echo $title; ?></a> (<?php echo $url; ?>) ではありませんか?</p>
<!-- フッター -->

<?php echo $url; ?>がURLで、<?php echo $title; ?>がページタイトルになります。

404ページに設定する

404.php を 404ページとして利用できるように設定して下さい。

.htaccess なら ErrorDocument 404 /404.php など。

補足など

デモページ: この記事のURLを間違える

肝心の精度は「無いよりまし」と言った感じです。でも、1,2文字のタイプミスならかなり近くなるはず。

URLの書き出しは何らかの方法で自動化した方がいいです。例えばMTを使う。

url_list.php の代替手段として、単純にURLを羅列したテキストファイルを fopen で読み込んでもいいと思います。速度は未検証。

Comment(0)

Post your commnet

Trackback(1)

Trackback URL
Permanent link
便利で優しい404ページをMovable Typeで使う
間違ったURLに近いURLを表示する404ページをMovable Typeで構築するTips.
From Rewish [2008/09/01-09:07]

Recent Entries
Category
Archives
Tag Cloud
あわせて読みたいブログパーツ