RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}],这是什么意思?

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}],这是什么意思?

我发现新版本(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 会阻止AuthorizationHTTP 请求标头(用于 HTTP 身份验证)传递到 CGI 脚本(即本例中的 PHP)。这是一项“安全功能”,用于阻止将用户凭据传递到所有 CGI 脚本(如果您不控制服务器,这些脚本可能不受信任)。

PHP 通常$_SERVER['HTTP_AUTHORIZATION']从 HTTP 授权标头设置超全局变量(和相关数组元素),但如果它已被 Apache 剥离,则不能。

指令尝试RewriteRule通过将环境变量设置为 HTTP 请求标头的值(这是在将请求传递给 PHP 之前).htaccess来“修复”此问题。然后,PHP 将环境变量分配给超全局数组。因此,理论上,它正在做同样的事情。但是,根据服务器配置,这不一定有效。HTTP_AUTHORIZATIONAuthorizationHTTP_AUTHORIZATION$_SERVER

或者,要明确允许“将 HTTP 授权标头作为 CGI 变量传递给脚本”,您可以设置CGIPassAuth On(Apache 2.4.13+) .htaccess,这应该允许 PHP 查看Authorization标头。但是,根据服务器配置,这也可能不起作用。

参考:

相关内容