.htaccess 文件 Wordpress RewriteRule Block Rearrange to the top

.htaccess file Wordpress RewriteRule Block Rearrange to the top

我在尝试通过休息访问我的网站时遇到问题(401 错误)API。我将 .htaccess 文件中的 Wordpress 块移到了顶部,现在我的网站可以访问了。这是我的 .htaccess 文件中的第一个块?

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

我需要像这样合并两行 RewriteRule 行吗?它在功能上有什么改变吗?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

在我进行任何更改之前,.htaccess 文件中的第一个块是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

因此,通过移动“Wordpress 块”,它只会添加一行 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Do I need to combine the two lines

您当然“不需要”将这两行结合起来。

如果您这样做,访问您的休息区可能没有任何影响API。

单个组合指令

正如您所做的那样,通过组合这两个指令,意味着 HTTP_AUTHORIZATION env var(用于帮助进行 HTTP 身份验证)将仅在通过 WordPress(包括主页)路由的请求上设置.并且(在 Apache*1 上)REDIRECT_HTTP_AUTHORIZATION env var 将 not 生成时请求被重写到 WordPress 前端控制器(index.php),即。主页以外的页面请求。尽管我很确定 WordPress 无论如何都不会利用这一点。 HTTP_AUTHORIZATION env var 不会像以前那样在对静态资源(图像、CSS、JS 等)的请求上设置。

两个独立的指令

对于两个单独的指令,与原始代码一样,HTTP_AUTHORIZATION env var 是在每个请求上设置的,包括对静态资源的请求。 (但通常情况下,这是多余的。)并且(在 Apache*1 上)请求时将生成 REDIRECT_HTTP_AUTHORIZATION env var重写为 WordPress 前端控制器 (index.php),即。主页以外的页面请求。

(*1 与 LiteSpeed 相反,无论如何都不会生成 REDIRECT_... 形式的环境变量。)


I moved the Wordpress block in my .htaccess file to the top and now my website is reachable.

这不一定是正确的做法。通常,WordPress 代码块(前端控制器)应该出现在文件的后面。可能只有一个冲突规则应该被“修改”或者可能移动到 WordPress 代码块之后。但是将这些指令移动到 WordPress 代码块之后可能会有效地完全“禁用”这些规则。


更新:

Prior to me moving the "Wordpress" block to the top, this is what the first block had:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

该代码块只是 WordPress 代码块的错误“副本”(减去 HTTP_AUTHORIZATION 变量),应该完全删除!