繁体   English   中英

如果在不更改浏览器中的URL地址的情况下输入了错误的动态URL,如何显示自定义404错误页面

[英]How to show custom 404 error page if dynamic URL is entered wrong without changing url address in browser

我有一个页面“ errors.php”,其中包含页眉,页脚,侧边栏,并且装饰精美。 在我的.htaccess文件中,我有-ErrorDocument 404 /errors.php。

现在,如果有人访问一个不存在的文件或目录,例如www.mywebsite.com/nofile,他会看到漂亮的404错误页面。 没关系

问题是-我在.htaccess中重写了规则,从而将www.mywebsite.com/view?id=1转换为www.mywbsite.com/view/this-is-seo-url-page。 这很好,工作正常。 现在我想如果有人输入错误的网址,然后向他显示404 /错误,例如www.mywebsite.com/view/this-is-wrong-url

在view.php中,我有这个-

<?php
include('header.php');
//make a database query and fetch data from tables
//To check write or wrong url, I am doing this
if ($row['friendly_url'] != $_GET['id']) {
    header("HTTP/1.1 404 Not Found");
    include('./errors.php');
    exit();
}
include('sidebar.php);
include('footer.php');

这工作正常,但由于errors.php也包含header.php文件,我正在获取标头已发送的错误。 因此,我想要解决方案,例如将用户重定向到errors.php页面,但在浏览器地址栏中,URL与用户输入的URL相同。 如果我执行header(location ...),则浏览器中的url将更改为新的目的地。

使用PHP不能解决此问题,但是可以使用逻辑解决。 您需要先从URL确定页面是否正确,然后再将任何输出发送到浏览器,然后设置标题并相应地包含正确的文件。

  • 阅读网址
  • 确定URL是否有效
  • 如果有效:
    • 包括( '的header.php');
    • include('page.php) ;
    • 包括('的sidebar.php);
    • 包括( 'footer.php');
  • 如果无效
    • 设置404标头
    • 包括( '的header.php');
    • include('error.php) ;
    • 包括('的sidebar.php);
    • 包括( 'footer.php');

此逻辑允许您设置headers()和包括includes()基于在脚本的顶部做出logicical决定- 让您的网址相同


在您的示例中,如果您的include('header.php'); 包括任何输出,然后是您的header("HTTP/1.1 404 Not Found"); 无论如何都会失败,因为您无法在标头之前发送任何输出。

我的天啊! 我用“ include_once();”解决了。

实际上,正如我在上述问题中所说的那样-include('header.php'); 在两个文件中,即在view.php和errors.php中。 因此,当访问者进入view.php时触发errors.php页面时,两个headers.php会发生冲突,并导致许多问题,例如标头已发送,会话/数据库主机/数据库名称已被声明等等。

因此,在页面errors.php中,我更改了include('header.php'); 到include_once('header.php');。 现在,当errors.php被触发时,只有一个header.php工作会被忽略,因此一切正常。

有些人可能会想到为什么我不删除“ include('header.php');”行。 如果发生冲突,则完全来自errors.php。 如果我完全删除了这一行,那么假设如果根目录下的静态静态url错误触发了404错误,则我的errors.php会显示给没有标题的访问者,这将破坏页面的其他功能。

希望我的意思很清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM