某些包含字符串 "admin-" 的请求出现 Wordpress 404 问题

Wordpress 404 issue with certain requests containg the string "admin-"

我有一个通常可用的 wordpress 页面,但今晚,当更新菜单不起作用时,我意识到有些东西不起作用。因此,在选择要添加到菜单的菜单项并点击“添加到菜单”按钮后,加载圆圈开始无限旋转。在开发人员控制台中检查更多详细信息后,我看到以下内容:

https://URL/wp-admin/-ajax.php 的 GET 请求导致 404。wp-admin/-ajax.php 在我看来不正确。实际上应该是wp-dmin/admin-ajax.php。所以出于某种原因,admin 部分被剥离了。

我注意到加载一些 CSS 文件时出现相同的症状: https://URL/wp-admin/-bar.min.js也加载不出来。我认为这实际上应该是 admin-bar.min.js.

我的 .htaccess 如下所示:

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

我也试过禁用所有插件都无济于事。

关于可能导致此问题的原因的任何提示?是什么导致从这些请求中删除 admin 部分?

编辑: 以下 apache-config 可能是原因吗?

RedirectMatch permanent /admin(.*) https://konferenzimforum.at/wp-admin/

为什么您的配置会出现这种情况

您从 Apache 配置文件中包含的配置行几乎可以肯定是此行为的根本原因。要理解 为什么 这是,我们必须更深入地研究行 实际上 的作用:

RedirectMatch permanent

很简单,这声明了一个基于 RegExp 模式匹配操作的 permanent(HTTP 代码 301)重定向。

/admin(.*)

这个模式基本上告诉 Apache,“匹配包含 /admin 的任何 URL,后跟任何字符,任意次数,同时 捕获 text after/admin 子字符串放入临时变量,</code>".</p> <pre><code>https://konferenzimforum.at/wp-admin/

此字符串然后采用较早捕获的值并指示 Apache 将请求者重定向到 URL https://konferenzimforum.at/wp-admin/,并附加较早捕获的值 到最后。

当这应用于您的示例中的 URL 时,wp-admin/admin-ajax.php 将变为 wp-admin/-ajax.php,因为 /admin 触发匹配,然后使用 wp-admin/admin-ajax.php 的其余部分=61=] 在 </code> 中作为 post-fix 捕获,然后创建您在浏览器的开发工具中看到的不存在的 URLs。您可以使用 <a href="https://regex101.com/r/OO4qhK/1/" rel="nofollow noreferrer">this Regex101</a> 以更加直观和通俗易懂的方式展示此模式在实践中的工作原理。您会在该页面上注意到,在您的配置中删除的部分突出显示的颜色与 URL 中传递给重定向 URL 的部分不同的颜色。</p> <hr /> <h3>如何解决</h3> <p>有很多方法可以解决这个问题;最简单的可能是完全删除此规则(因为仅根据问题中的信息尚不清楚为什么首先需要此规则)。</p> <p>另一种方法是确保只匹配对 <code>/admin/* 的请求,而不是任意匹配包含 /admin 序列的所有 URL(其中,作为您已经看到,可能会无意中将 文件 /admin 开头)作为目标,这似乎是您想要做的更多事情(重定向对 /admin 的请求到适当的 /wp-admin 资源):

RedirectMatch permanent /admin/(.*) https://konferenzimforum.at/wp-admin/