Php

LiteSpeed 忽略 PHP 標頭 404 狀態

  • September 24, 2018

將我的網站移動到使用 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 本身工作正常。
  • header() 呼叫也會在非 mod_rewrite URL 上被忽略,例如 test?id=2
  • 這兩個站點在我嘗試過的那些 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';
?>  

然後嘗試 request test?id=2

NotePad++ 被配置為使用“使用 UTF8 編碼”而不是“使用 UTF8 編碼而不使用 BOM”

這意味著某些文件包含“不可見”的前導 BOM。

我一直在瀏覽器開發者模式下檢查 HTTP 請求和響應,但那裡的 BOM 是不可見的。

如果您已經在標頭之前輸出了任何內容,那麼 PHP 中的 header() 將(當然)不起作用

我懷疑我在 Apache 上從未遇到過這個問題的原因是自動修復它

大多數時候,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 行為不同,您可以記錄工單。

引用自:https://serverfault.com/questions/932026