所以我知道这看起来有点奇怪,但为了保持一致性,我希望我的所有网址都以这种形式出现:http://domain.com/page/到目前为止,我已经让常规页面正常工作但我似乎无法让错误页面正常工作。
如果用户访问不存在的页面或目录,我希望浏览器硬重定向到:http://domain.com/404/但是,此目录实际上不存在。错误页面的真实位置将在/pages/errors/404.php
下此外,虽然我不需要所有各种错误(400,401,403,404,500)的确切答案,但我将应用任何方法将所有这些错误重定向到他们的“正确”URL(例如。http://domain.com/400/ http://domain.com/500/等。)
有什么想法吗?
答案 0 :(得分:52)
在你的.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重定向到特定网址,将所有500个重定向到另一个网址(替换为您的域名)。
重写规则将该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;
?>
答案 1 :(得分:11)
将此代码放入.htaccess文件
RewriteEngine On
ErrorDocument 404 /404.php
其中404.php是文件名并放在root。你可以把完整的路径放在这里。
答案 2 :(得分:2)
尝试将此规则添加到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]
答案 3 :(得分:1)
在.htaccess文件中,如果您使用的是apache,可以尝试使用
错误页面规则 - 404ErrorDocument 404 http://www.domain.com/notFound.html