.htaccess でこれを試してください:
.htaccess
ErrorDocument 404 http://example.com/404/
ErrorDocument 500 http://example.com/500/
# or map them to one error document:
# ErrorDocument 404 /pages/errors/error_redirect.php
# ErrorDocument 500 /pages/errors/error_redirect.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]
RewriteCond %{REQUEST_URI} ^/500/$
RewriteRule ^(.*)$ /pages/errors/500.php [L]
# or map them to one error document:
#RewriteCond %{REQUEST_URI} ^/404/$ [OR]
#RewriteCond %{REQUEST_URI} ^/500/$
#RewriteRule ^(.*)$ /pages/errors/error_redirect.php [L]
は、ErrorDocument
すべての 404 を特定の URL にリダイレクトし、すべての 500 を別の URL にリダイレクトします (ドメインに置き換えます)。
Rewrite ルールは、その URL を実際の 404.php スクリプトにマップします。RewriteCond 正規表現は、必要に応じてより一般的なものにすることができますが、オーバーライドするすべての ErrorDocument コードを明示的に定義する必要があると思います。
ローカル リダイレクト:
.htaccess ErrorDocument を存在するファイルに変更します (存在する必要があります。存在しない場合、エラーが発生します)。
ErrorDocument 404 /pages/errors/404_redirect.php
404_redirect.php
<?php
header('Location: /404/');
exit;
?>
エラー番号に基づいてリダイレクト
ErrorDocument
リダイレクトするエラーごとに .htaccess に行を指定する必要があるようです(参照: Apache ErrorDocumentおよびApache Custom Error )。上記の.htaccessの例には、複数の例が含まれています。上記の 404_redirect.php を置き換える汎用リダイレクト スクリプトとして以下を使用できます。
error_redirect.php
<?php
$error_url = $_SERVER["REDIRECT_STATUS"] . '/';
$error_path = $error_url . '.php';
if ( ! file_exists($error_path)) {
// this is the default error if a specific error page is not found
$error_url = '404/';
}
header('Location: ' . $error_url);
exit;
?>