将我的网站移至使用 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 上这些似乎都被忽略了。
- LiteSpeed 中是否有任何选项可以关闭以获得与 Apache 兼容的行为?我可以访问 cPanel 和 .htaccess
- 还有其他可能的解释和/或解决方案吗?
笔记:
- 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 上从未遇到过这个问题的原因是它会自动修复