Я хочу защитить все интерфейсы администратора 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