【问题标题】:http_response_code(200) not working with ErrorDocument 404http_response_code(200) 不适用于 ErrorDocument 404
【发布时间】:2018-03-24 12:44:45
【问题描述】:

我的 php 函数 http_response_code() 有问题。我在网站根目录的 htaccess 文件中设置了 ErrorDocument 404,以将每个错误调用重定向到 php 文件。在这个 php 文件中,我想在某些情况下将响应的标头设置为代码 200 OK。但这不起作用。 Chrome总是对我说状态码是404。

这是我的 .htaccess 文件的内容:

ErrorDocument 404 /abc.php

这是我的简单 abc.php 文件的内容:

<?php   

http_response_code(200); 

?>

Test

如果我使用其他代码,例如201, 301 或其他,它的工作原理。只有 200 个不工作。

这里是示例的链接:http://test.foxpage.de/abdfgsdfgsdfgsdfgsdf

有人可以帮我吗?

谢谢!!

【问题讨论】:

  • 你在使用任何框架吗?
  • 没有。对于一个测试用例,我只创建了 2 个包含您在上面看到的内容的测试文件。而且它不起作用。
  • 可以是apache conf或者php.ini中的设置吗?
  • 关于信息,我有这个版本:7.0.22-0ubuntu0.16.04.1
  • 当您尝试运行此 url test.foxpage.de/abdfgsdfgsdfgsdfgsdf 时。它将尝试在您的网络服务器的根路径中查找文件 abdfgsdfgsdfgsdfgsdf(.php) 或 (.html)。它不会显示它会给出 404 响应,但是在您的 .htaccess 中,您配置为在发生 404 响应时显示 abc.php。但是当您运行 abc.php 时,它会给您 200 响应

标签: php .htaccess header http-response-codes


【解决方案1】:

我认为这是 Apache 的错误/功能。您不能直接从 ErrorDocument 将状态代码覆盖为 200。

但是,我认为这个 hack 应该对你有用,如果你可以忍受对你的 ErrorDocument 有一个永久的 200 响应(恕我直言,这有点可怕,机器人会讨厌的东西)。

 Redirect 200 /abc.php
 ErrorDocument 404 /abc.php

see this answer了解更多详情。

【讨论】:

  • 抱歉,我不想要永久的 200 状态码。太令人困惑了,相同的脚本在我的本地 apache/php 安装上完美运行,但在我的网络服务器上却不行:(
【解决方案2】:

这适用于第一行:How can I replace Apache HTTP code 404 to 200

<?php header("Status: 200 OK"); ?>

此代码必须放在 .php 文件顶部的第一行代码中。搜索引擎、爬虫、浏览器和任何访问该站点的人都会将错误文档 404 页面视为标题 200。

Header 200 表示页面存在。 Google 将抓取标题状态为 200 的网站并将其编入索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2013-01-04
    • 2011-12-01
    • 2012-08-25
    相关资源
    最近更新 更多