.htaccess 重新导向404错误htaccess后重新写入URL

hgncfbus  于 2022-11-16  发布在  其他
关注(0)|答案(4)|浏览(162)

所以我知道这可能看起来有点奇怪,但我为了一致性,我想我所有的网址出现在这种形式:

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/

等等。
有什么想法吗?

1tu0hz3e

1tu0hz3e1#

在.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(替换为您的域)。
Rewrite规则将该URLMap到实际的404.php脚本。如果您愿意,RewriteCond正则表达式可以变得更通用,但我认为您必须显式定义所有要覆盖的ErrorDocument代码。

本地重定向:

将.htaccess ErrorDocument更改为存在的文件(必须存在,否则会出现错误):

ErrorDocument 404 /pages/errors/404_redirect.php

404错误提示-页面未找到

<?php
   header('Location: /404/');
   exit;
?>

根据错误号重定向

看起来您需要在.htaccess中为每个要重定向的错误指定一个ErrorDocument行(请参见:上面的**.htaccess**示例中有多个示例。您可以使用下面的脚本作为通用重定向脚本来替换上面的404_redirect.php。

错误_重定向.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;
?>
p8ekf7hl

p8ekf7hl2#

将此代码放入**.htaccess**文件中

RewriteEngine On
ErrorDocument 404 /404.php

其中404.phpfile name放在根处。您可以将full path放在这里。

zynd9foi

zynd9foi3#

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

iyfjxgzm4#

在.htaccess文件中,如果使用的是apache,可以尝试使用
页面未找到- 404
错误文档404 http://www.domain.com/notFound.html

相关问题