重定向404错误htaccess后重写URL

时间:2013-11-13 19:36:12

标签: .htaccess redirect url-rewriting rewrite custom-error-pages

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

答案 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 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;
?>

答案 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,可以尝试使用

错误页面规则 - 404

ErrorDocument 404 http://www.domain.com/notFound.html