HTTP状态代码404,但内容加载完全正常

问题描述 投票:-1回答:1

我正在运行一个网站,我正在尝试自己的slug机制。

这是我的.htaccess文件内容

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L,QSA]
</IfModule>

在我的index.php中,我有以下代码

$_REQUEST['action'] = trim($_SERVER['REQUEST_URI'],"/");
...
if (!empty( $_REQUEST['action'] )) {

    $action = explode("/", $_REQUEST['action']);
    $slug = $action[0];
    $pageName = $slug.".php";

    if (file_exists($pageName)) {
        require_once $pageName; // 404 status code
    }
    else {
        echo 'Your page is not found'; // 200 status code
    }
} else {
    require_once 'welcome.php';
}

现在它将如何运作

/school will be mapped on school.php

/mobile will be mapped on mobile.php

/about will be mapped on about.php

显然这项工作完全没问题,内容装得很好,但问题是HTTP status code是404

另一方面,如果我随机输入一些东西就像

/some-thing-random它显示这行echo 'Your page is not found';有200状态代码(请注意some-thing-random.php不存在)

对我来说奇怪的是如下,我刚刚在.htaccess文件中添加了以下行,现在它的工作正常,有200条消息

Options +FollowSymLinks -MultiViews

对于那些担心manually设置标题的人:我没有。它不应该,所有类型的URL都会被index.php拦截,至少这是我对你的.htaccess文件的理解

一个更奇怪的是,可能会帮助你回答我的问题是让我们说如果url如下qazxsw poi和如果重命名文件qazxsw poi作为qazxsw poi然后只是执行以下

www.mysite.com/about

它工作正常

现在我的问题是究竟发生了什么?任何人都可以向我解释一下(还要注意我正在使用GoDaddy托管)

php .htaccess
1个回答
0
投票

要发送404代码,必须在标题中指明。

header(“HTTP / 1.0 404 Not Found”);

更多关于about.php的信息

© www.soinside.com 2019 - 2024. All rights reserved.