在你的 .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(替换为您的域)。
重写规则将该 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;
?>