【发布时间】:2017-02-20 05:29:44
【问题描述】:
我的错误页面是一个PHP文件,整个是
<?php
$path_parts = pathinfo($_SERVER['REQUEST_URI']);
$parts = explode('/', $path_parts['dirname']);
if (in_array("abcde", $parts))
{
header('Location: https://example.com/vwxyz/abcde-error-page.php');
exit();
}
else
{
header('Location: https://example.com/vwxyz/error-404-page.php');
exit();
}
?>
我希望访问“abcde”目录中不存在的 URL 的用户看到特定的错误页面,该 URL 应为 https://example.com/vwxyz/abcde-error-page.php,状态码应为 302。这工作得很好。
我希望访问任何其他不存在的 URL(在“vwxyz”目录或 example.com 上的任何其他位置)的用户查看https://example.com/vwxyz/error-404-page.php,但状态码为 404要返回,并且他们浏览器中的 URL 仍然应该是他们错误输入的任何内容。当然,这不适用于 header('Location ... 而且我不能使用 file_get_contents 或 include 因为结果会清空购物购物车并注销用户(如果他们已登录)。
我觉得有一种更简单的方法可以在不编辑 .htaccess 文件的情况下拥有多个 404 页面(尽管人们可能会认为这确实是更简单的方法)。重要的是主错误页面的行为与正常错误页面完全相同,但另一个(对于“abcde”目录)是重定向,并且“abcde”目录的特殊错误页面不在该目录中(用户被重定向出目录,然后显示“错误”页面,不应返回 404 状态)。
【问题讨论】:
-
“我觉得有一种更简单的方法可以在不编辑 .htaccess 文件的情况下拥有多个 404 页面(尽管可能有人认为这确实是更简单的方法)。” ...是的,我很确定这将是 .htaccess 中的 3 行
标签: php .htaccess redirect http-status-code-404 http-status-code-302