Php
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 上,這些似乎都被忽略了。
- LiteSpeed 中是否有任何選項可以關閉以獲取 Apache 兼容行為?我可以訪問 cPanel 和 .htaccess
- 任何其他可能的解釋和/或解決方案?
筆記:
- 問題發生在 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 行為不同,您可以記錄工單。