Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP显示默认的Apache404_Php_Apache_Apache2_Ubuntu 14.04 - Fatal编程技术网

如何从PHP显示默认的Apache404

如何从PHP显示默认的Apache404,php,apache,apache2,ubuntu-14.04,Php,Apache,Apache2,Ubuntu 14.04,我环顾四周,没有发现任何关于我需要什么的问题 我想做一个类似于“admin.php”的东西,但是如果条件不合适,我想让它返回404。然而,一个看起来与404页面其余部分不同的404将向攻击者提示“admin.php”是一个真实的文件 我不想创建自己的自定义404页面,我认为Apache默认的404对我来说已经足够好了。如何发送一个404来触发apache发送已经存在的错误文档。我假设这个错误文档在搜索后位于(Ubuntu):“/usr/share/apache2/error/HTTP\u NOT

我环顾四周,没有发现任何关于我需要什么的问题

我想做一个类似于“admin.php”的东西,但是如果条件不合适,我想让它返回404。然而,一个看起来与404页面其余部分不同的404将向攻击者提示“admin.php”是一个真实的文件

我不想创建自己的自定义404页面,我认为Apache默认的404对我来说已经足够好了。如何发送一个404来触发apache发送已经存在的错误文档。我假设这个错误文档在搜索后位于(Ubuntu):“/usr/share/apache2/error/HTTP\u NOT\u FOUND.html.var”

当我使用诸如:

<?php
    http_response_code(404);
    die();
?>

它在web浏览器中的外观如下所示:

当我请求一个真正不在web服务器上的URL时,它看起来是这样的:


我想知道如何使用Apache的默认404页面使“/admin.php”看起来像第二个图像。有没有一种方法可以不使用.htaccess文件,只使用PHP来实现这一点?如果没有,我就必须弄清楚如何处理Apache设置。

返回404是没有办法的,因为Apache将找到该文件,因此不再抛出错误页。您可以做的最好的事情是模拟Apache错误页面:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> was not found on this server.</p>
</body></html>

404找不到
找不到
在此服务器上找不到请求的URL/

完整的php嵌入示例(已测试)如下所示:

if ( $_SESSION['login_user'] !== "admin" ) {

    echo("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">");
    echo("<html><head>");
    echo("<title>404 Not Found</title>");
    echo("</head><body>");
    echo("<h1>Not Found</h1>");
    echo("<p>The requested URL ".htmlspecialchars($_SERVER['REQUEST_URI'])." was not found on this server.</p>"); 
    echo("<hr>");
    echo("<address>".apache_get_version()." Server at ".$_SERVER['SERVER_ADDR']." Port ".$_SERVER['SERVER_PORT']."</address>");
    echo("</body></html>");
    exit;
        }
if($\u会话['login\u user']!=“admin”){
回声(“”);
回声(“”);
回声(“404未找到”);
回声(“”);
回声(“未找到”);
echo(请求的URL.htmlspecialchars($\u SERVER['REQUEST\u URI'])。在此服务器上找不到。

”; 回声(
); echo(“.apache\u get\u version()”服务器位于“$\u服务器['Server\u ADDR']”端口“$\u服务器['Server\u端口]”); 回声(“”); 出口 }
这是一种糟糕的做法。你不应该重复每一行。echo也不需要支架。