51

所以我知道这可能看起来有点奇怪,但为了保持一致性,我希望我的所有网址都以这种形式出现: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/等)

有任何想法吗?

4

4 回答 4

86

在你的 .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 ErrorDocumentApache 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;
?>
于 2013-11-13T19:45:42.403 回答
24

将此代码放入您的.htaccess文件中

RewriteEngine On
ErrorDocument 404 /404.php

404.php放在哪里file nameroot 。你可以放这里。full path

于 2014-09-24T11:12:06.693 回答
6

尝试将此规则添加到 htaccess 的顶部

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]
于 2013-11-13T19:46:30.797 回答
2

在您的 .htaccess 文件中,如果您使用的是 apache,您可以尝试使用

错误页面规则 - 404

错误文档 404 http://www.domain.com/notFound.html

于 2013-11-13T19:44:11.017 回答