Apache FilesMatch (глобальная конфигурация) имеет приоритет над локальным .htaccess

Apache FilesMatch (глобальная конфигурация) имеет приоритет над локальным .htaccess

Я хочу защитить все интерфейсы администратора Wordpress (wp-login.php/wp-admin) на моем сервере. Для этого я хочу создать глобальную конфигурацию в Apache, запрашивающую фиксированного пользователя/пароля (базовая аутентификация HTTP) перед тем, как попасть на настоящую страницу входа WordPress. Это позволит избежать перегрузки 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 (модулем Rewrite): запрашивать пароль, а не перезаписывать URL (выдавая ошибку 404).

Есть идеи?

решение1

Решено

Wordpress .htaccess перезаписывает все, включая директивы ErrorDocument, которые используются HTTP Basic Authentication, коды возврата 401 и 403. У меня были персонализированные файлы SHTML для ErrorDocument (по умолчанию на серверах cPanel). Поэтому вместо того, чтобы запрашивать пароль, он перезаписывает заголовки HTTP, запрашивая парольиодновременно отображается страница с ошибкой 404, что сводит с ума веб-браузер.

Чтобы исправить это, я просто принудительно установил сообщения ErrorDocument по умолчанию:

ErrorDocument 401 default
ErrorDocument 403 default

Связанный контент