Apache FilesMatch(全局配置)优先于本地 .htaccess

Apache FilesMatch(全局配置)优先于本地 .htaccess

我想保护我服务器中的所有 Wordpress 管理界面 (wp-login.php/wp-admin)。为此,我想在 Apache 中创建一个全局配置,在到达真正的 WordPress 登录页面之前要求输入固定的用户/密码(HTTP 基本身份验证)。这将避免密码扫描机器人导致 PHP 过载。

<FilesMatch "wp-login.php">
 AuthUserFile /etc/wordpress.passwd
 AuthName "TYPE USER wp AND PASSWORD wp"
 AuthType Basic
 require valid-user
</FilesMatch>

有效,任何名为 wp-login.php 的文件都会要求输入密码。

但当我在 Wordpress 网站中运行时,它的.htaccess具有某种“优先于”全局配置。当我访问 wp-login.php 时,我只收到 404 错误。如果我删除/重命名 .htaccess,FilesMatch 可以工作,但我失去了“路径掩码”功能,这是必需的。

Wordpress .htaccess 是:

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

我正在寻找一种方法,使 FilesMatch 指令优先于 .htaccess(重写模块):询问密码,而不是重写 URL(给出 404)。

有任何想法吗?

答案1

解决了

Wordpress .htaccess 会重写 HTTP 基本身份验证、401 和 403 返回代码所使用的所有内容,包括 ErrorDocument 指令。我已为 ErrorDocument(cPanel 服务器中的默认设置)个性化了 SHTML 文件。因此,它不会要求输入密码,而是重写 HTTP 标头,要求输入密码同时显示404错误页面,让网络浏览器疯狂。

为了修复它,我只是强制使用默认的 ErrorDocument 消息:

ErrorDocument 401 default
ErrorDocument 403 default

相关内容