所以我知道这可能看起来有点奇怪,但为了保持一致性,我希望所有网址都以这种形式出现:
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/
等等
有什么想法吗?
在您的 .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;
?>
根据错误号重定向
看起来您需要在 .htaccess 中为要重定向的每个错误指定
ErrorDocument
行(请参阅: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;
?>
将此代码放入您的
.htaccess
文件中
ErrorDocument 404 /404.php
其中
/404.php
是本地目标 URL,必须以“/”开头,您将其放置在根目录中。
您可以提供完整的外部 URL,如下所示。
ErrorDocument 404 https://example.com/404.php
尝试将此规则添加到 htaccess 的top:
RewriteEngine On
RewriteRule ^404/?$ /pages/errors/404.php [L]
然后根据该规则(或您拥有的任何其他规则):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://domain.com/404/ [L,R]
在你的 .htaccess 文件中,如果你使用的是 apache,你可以尝试使用
错误页面规则 - 404错误文档 404 http://www.domain.com/notFound.html