少し奇妙に思われるかもしれませんが、一貫性を保つために、すべての URL を次の形式で表示したいと思います。
http://example.com/page/
これまでのところ、通常のページは機能していますが、エラー ページは適切に機能していないようです。
ユーザーが存在しないページまたはディレクトリにアクセスした場合、ブラウザを次の場所にハードリダイレクトします。
http://example.com/404/
ただし、このディレクトリは実際には存在しません。エラーページの実際の場所は、
/pages/errors/404.php
また、さまざまなエラー (400、401、403、404、500) すべてに対する正確な回答は必要ありませんが、これらすべてを「適切な」URL にリダイレクトするために提供されている方法を適用します。
http://example.com/400/
http://example.com/500/
等
何か案は?
ベストアンサー1
.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_リダイレクト
<?php
header('Location: /404/');
exit;
?>
エラー番号に基づいてリダイレクトする
ErrorDocument
リダイレクトしたいエラーごとに .htaccess に行を指定する必要があるようです(参照:Apache エラードキュメントそしてApache カスタム エラー)。.htaccess上記の例には複数の例が含まれています。次の例を汎用リダイレクト スクリプトとして使用し、上記の 404_redirect.php を置き換えることができます。
エラーリダイレクト.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;
?>