Я хочу защитить все интерфейсы администратора 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 (модуль перезаписи): запрашивать пароль, а не перезаписывать URL (давая 404).
Есть идеи?
Решено
Wordpress .htaccess перезаписывает все, включая директивы ErrorDocument, которые используются базовой аутентификацией HTTP, кодами возврата 401 и 403. У меня были персонализированные файлы SHTML для ErrorDocument (по умолчанию на серверах cPanel). Таким образом, вместо того, чтобы запрашивать пароль, он переписывает заголовки HTTP, запрашивая пароль и , показывая страницу с ошибкой 404 одновременно, сводя с ума веб-браузер.
Чтобы исправить это, я просто установил сообщения ErrorDocument по умолчанию:
ErrorDocument 401 default
ErrorDocument 403 default