PHP,MVC,404-如何重定向到404?

PHP,MVC,404-如何重定向到404?,php,http-status-code-404,Php,Http Status Code 404,我正在尝试建立我自己的MVC作为一种实践和学习经验。到目前为止,这就是我所拥有的(index.php): 我这里的问题是,我不能使用header发送到404,因为header已经发送了。我应该直接重定向到a404.html还是有更好的方法?请随意评论我到目前为止所做的(很少)。我会喜欢的建议和想法。谢谢 MVC框架中的标准实践是使用(ob_start(),ob_get_contents(),和ob_end_clean())来控制如何、何时以及向用户发送什么 这样,只要捕获框架的输出,就不会将

我正在尝试建立我自己的MVC作为一种实践和学习经验。到目前为止,这就是我所拥有的(index.php):



我这里的问题是,我不能使用header发送到404,因为header已经发送了。我应该直接重定向到a
404.html
还是有更好的方法?请随意评论我到目前为止所做的(很少)。我会喜欢的建议和想法。谢谢

MVC框架中的标准实践是使用(
ob_start()
ob_get_contents()
,和
ob_end_clean()
)来控制如何、何时以及向用户发送什么

这样,只要捕获框架的输出,就不会将其发送给用户,直到您希望它这样做

要加载404,您可以使用(例如):


我的英语不是很好,但我会努力的;404错误触发器在运行任何代码之前都会在服务器上触发(因为假定页面不存在,所以没有代码)

因此,如果您想给用户一个404错误,在php代码中查找错误,您必须使用一个简单的重定向到404.html

另一方面,如果您有权访问服务器配置文件,则可以在服务器上编程,而不是在服务器上运行网页。你可以用WAMP来练习

我希望你能理解我。赛亚

编辑我必须添加:

$page=$_GET['page']


如果未设置$\u GET['page'],这将给您带来一个错误,您必须在尝试使用它之前检查isset($\u GET['page'])。

您应该重定向它或只是将其包括在内,下面是修改后的代码:

require "config.php";

$page = $_GET['page'];
if( isset( $page ) ) { 
    echo "isset is true";
    if( file_exists( MVCROOT . "/$page.php" ) ) {
        include  MVCROOT . "$page.php";
    } else {
        include  MVCROOT . "404.html";
    }
}

这只是包括一个告诉用户404错误的页面,而实际的HTTP 404头完全消失了。@BoltClock:是的,基本上就是关于OP的这句话,我应该重定向到404.htmlTry删除或注释掉
echo“isset is true”
行。哦,是的,我是出于测试目的使用它的。让我删除它。如果$\u GET['page']是'../../../../../etc/passwd',会发生什么情况?(即)我期待一些404消息,但这只是Firefox上的一个空白页。很多时候,如果没有内容和响应代码,那么浏览器将提供自己的内容。尝试在标题后添加自己的404页面。我会更新我的答案。@Doug,它不会给你一个错误,但会给你一个警告。您应该执行类似以下操作:
$page=isset($\u GET['page'])?$\u GET['page']:null这样,不会生成警告,并且您知道未设置
$\u GET['page']
事件中
$page
的确切值。这是正确的,不是错误,而是警告。。。仍在提高我的英语:)
<?php
require "config.php";

$page = $_GET['page'];
ob_start();

if (isset($page)) {
    echo "isset is true";
    if (file_exists(MVCROOT."/$page.php")) {
        include MVCROOT."/$page.php";
        $output = ob_get_contents();
        ob_end_clean();
        echo $output;
    } else {
        ob_end_clean(); //we don't care what was there
        header("HTTP/1.0 404 Not Found");
        include MVCROOT."/error_404.php"; // or echo a message, etc, etc
    }
}
?>
require "config.php";

$page = $_GET['page'];
if( isset( $page ) ) { 
    echo "isset is true";
    if( file_exists( MVCROOT . "/$page.php" ) ) {
        include  MVCROOT . "$page.php";
    } else {
        include  MVCROOT . "404.html";
    }
}