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

时间:2017-12-18 13:29:00

标签: php .htaccess

我正在运行一个网站,我正在尝试自己的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状态代码(请注意,某些东西 - random.php不存在)

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

Options +FollowSymLinks -MultiViews

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

另一个奇怪的事情是,可能会帮助你回答我的问题 说吧 如果网址如下 www.mysite.com/about并将文件about.php重命名为xabout.php,然后执行以下操作

$fileName = 'x'.$slug.'.php';
require_once($fileName);

一切正常

现在我的问题是究竟什么是幸福的?任何人请向我解释这个(还请注意我使用的是GoDaddy托管)

1 个答案:

答案 0 :(得分:0)

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

  

标题(&#34; HTTP / 1.0 404 Not Found&#34;);

http://php.net/manual/fr/function.header.php

上的更多信息