我发现新版本(V5.9)的 Wordpress 在 .htaccess 中添加了这一行:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
旧版本的 Wordpress 没有这行。这是什么意思?我可以删除它吗?
答案1
如果您没有在 WordPress 中使用 HTTP 身份验证,那么您可以将其删除。
如果您使用 PHP 作为 Apache 模块,则可以将其删除。(也许 WP 在生成文件时会检测到这一点.htaccess
?)
在旁边:但是,由于此指令位于 WordPress 代码块内(即# BEGIN WordPress
/# END WordPress
注释标记之间),因此如果您确实将其删除,那么 WordPress 只会“尝试”并在稍后将其放回原位。(出于这个原因,您应该避免手动编辑 WP 代码块。)
有了这个指令.htaccess
不会引起任何问题。
当 PHP 安装为 CGI 时,Apache 会阻止Authorization
HTTP 请求标头(用于 HTTP 身份验证)传递到 CGI 脚本(即本例中的 PHP)。这是一项“安全功能”,用于阻止将用户凭据传递到所有 CGI 脚本(如果您不控制服务器,这些脚本可能不受信任)。
PHP 通常$_SERVER['HTTP_AUTHORIZATION']
从 HTTP 授权标头设置超全局变量(和相关数组元素),但如果它已被 Apache 剥离,则不能。
指令尝试RewriteRule
通过将环境变量设置为 HTTP 请求标头的值(这是在将请求传递给 PHP 之前).htaccess
来“修复”此问题。然后,PHP 将环境变量分配给超全局数组。因此,理论上,它正在做同样的事情。但是,根据服务器配置,这不一定有效。HTTP_AUTHORIZATION
Authorization
HTTP_AUTHORIZATION
$_SERVER
或者,要明确允许“将 HTTP 授权标头作为 CGI 变量传递给脚本”,您可以设置CGIPassAuth On
(Apache 2.4.13+) .htaccess
,这应该允许 PHP 查看Authorization
标头。但是,根据服务器配置,这也可能不起作用。
参考: