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 で読み込んでもいいと思います。速度は未検証。
Trackback(1)
- Trackback URL
- Permanent link
- 便利で優しい404ページをMovable Typeで使う
- 間違ったURLに近いURLを表示する404ページをMovable Typeで構築するTips.
Comment(0)
Post your commnet