Apache-2.2

重寫規則。* -和=H噸噸磷一種在噸H或我_從一個_一世開_:和=H噸噸磷一種在噸H這R一世從一種噸一世這ñ:E=HTTP_AUTHORIZATION:%{HTTP:Authorization},這是什麼意思?

  • February 24, 2022

我發現 Wordpress 的新版本(V5.9)在 .htaccess 中添加了這一行:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

舊版本的 Wordpress 沒有這一行。這是什麼意思?我可以刪除它嗎?

如果您沒有在 WordPress 中使用 HTTP 身份驗證,則可以將其刪除。

如果您使用 PHP 作為 Apache 模組,則可以將其刪除。(也許 WP 在生成.htaccess文件時會檢測到這一點?)

*旁白:*但是,由於此指令位於 WordPress 程式碼塊內(即在# BEGIN WordPress/# END WordPress註釋標記之間),因此如果您刪除它,那麼 WordPress 只會“嘗試”並稍後再放回去。(出於這個原因,您應該避免手動編輯 WP 程式碼塊。)

有這個指令.htaccess不會導致任何問題。

當 PHP 作為 CGI 安裝時,Apache 會阻止AuthorizationHTTP 請求標頭(與 HTTP 身份驗證一起使用)傳遞給 CGI 腳本(即本例中的 PHP)。這是一項“安全功能”,可防止將使用者的憑據傳遞給所有 CGI 腳本(如果您不控制伺服器,這些腳本可能不受信任)。

PHP 通常$_SERVER['HTTP_AUTHORIZATION']從 HTTP Authorization 標頭設置超全域(和關聯的數組元素),但如果它已被 Apache 剝離,則它不能。

RewriteRule指令.htaccess試圖通過將HTTP_AUTHORIZATION環境變數設置為AuthorizationHTTP 請求標頭的值來“修復”此問題(這是在將請求傳遞給 PHP 之前)。然後 PHP 將HTTP_AUTHORIZATIONenv var 分配給$_SERVER超全域數組。所以,理論上,它在做同樣的事情。但是,根據伺服器配置,這不一定有效。

或者,要明確允許“將 HTTP 授權標頭作為 CGI 變數傳遞給腳本”,您可以設置CGIPassAuth On(Apache 2.4.13+).htaccess,這應該允許 PHP 看到Authorization標頭。但是,根據伺服器配置,這也可能不起作用。

參考:

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