LiteSpeed 忽略 PHP 标头 404 状态

LiteSpeed 忽略 PHP 标头 404 状态

将我的网站移至使用 LiteSpeed 的网络主机后,PHP 标头似乎被忽略了。

我尝试过这些变化:

  • $s = "HTTP/1.1 404 Not Found";
  • $s = "HTTP/1.0 404 Not Found";
  • $s = "Status: 404 Not Found";
  • $s = $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found';

其次是

header($s)

但在 LiteSpeed 上这些似乎都被忽略了。

  1. LiteSpeed 中是否有任何选项可以关闭以获得与 Apache 兼容的行为?我可以访问 cPanel 和 .htaccess
  2. 还有其他可能的解释和/或解决方案吗?

笔记:

  • https 和 http 变体上均发生问题
  • 返回 404 的页面是用于处理 mod_rewrites 的页面(因此对于在数据库中未找到有效内容的 URL 查询,应返回 404 http 响应代码)
  • 问题也发生在我放置服务器的另一个域上(使用流行的 PHP 论坛解决方案,带有基于 mod_rewrite 的插件,以获得美观​​的 URL)
  • mod_rewrites 本身运行良好。
  • 对于非 mod_rewrite URL(例如 test?id=2),header() 调用也会被忽略
  • 我试过的两个 Apache 服务器(至少两个不同的 Apache 网络主机 + 我的本地主机)上这两个网站都可以正常运行。

此外,我在两个网站上的 .htaccss 文件中禁用了 LiteSpeed 缓存

<IfModule LiteSpeed>
RewriteRule .* - [E=Cache-Control:no-cache]
</IfModule>

可以通过创建一个简单的

test.php 文件如下

<?php
  $s = $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found';
  header($s);
  echo 'test';
?>  

然后尝试请求测试?id=2

答案1

大多数时候,LSWS 的行为与 apache 相同。

如果您具有服务器或 WHM 控制面板的 root ssh 访问权限,您可以尝试在 apache 和 LSWS 之间切换,看看它们的行为是否相同。

切换到 apache:/usr/local/lsws/admin/misc/cp_switch_ws.sh apache 切换到 LSWS /usr/local/lsws/admin/misc/cp_switch_ws.sh lsws

如果是这样,您可能需要检查您的 PHP 代码或重写规则以查看哪里出了问题。

如果 Apache 和 LSWS 的行为不同,您可以记录一张票。

答案2

NotePad++ 配置为使用“使用 UTF8 编码”而不是“使用无 BOM 的 UTF8 编码”

这意味着一些文件包含“不可见的”前导 BOM。

我一直在浏览器开发模式下检查 HTTP 请求和响应,但是 BOM 是不可见的。

...

如果你已经输出了任何事物标题之前

...

我怀疑我在 Apache 上从未遇到过这个问题的原因是它会自动修复

相关内容