重定向404错误htaccess后重写URL

问题描述 投票:0回答:4

所以我知道这可能看起来有点奇怪,但为了保持一致性,我希望所有网址都以这种形式出现:

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 redirect url-rewriting custom-error-pages
4个回答
93
投票

在您的 .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 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;
?>

25
投票

将此代码放入您的

.htaccess
文件中

ErrorDocument 404 /404.php

其中

/404.php
是本地目标 URL,必须以“/”开头,您将其放置在根目录中。

您可以提供完整的外部 URL,如下所示。

ErrorDocument 404 https://example.com/404.php

参考:Apache.org 自定义错误文档


7
投票

尝试将此规则添加到 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]

2
投票

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

错误页面规则 - 404

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

© www.soinside.com 2019 - 2024. All rights reserved.