Quiero proteger todas las interfaces de administración de Wordpress (wp-login.php/wp-admin) en mi servidor. Para hacer esto, quiero crear una configuración global en Apache, solicitando un usuario/contraseña fija (autenticación básica HTTP), antes de llegar a la página de inicio de sesión real de WordPress. Esto evitará la sobrecarga de PHP por parte de los robots de escaneo de contraseñas.
<FilesMatch "wp-login.php">
AuthUserFile /etc/wordpress.passwd
AuthName "TYPE USER wp AND PASSWORD wp"
AuthType Basic
require valid-user
</FilesMatch>
Funciona, cualquier archivo llamado wp-login.php solicitará la contraseña.
Pero cuando ejecuto un sitio de Wordpress, su.htaccesstiene algún tipo de "prioridad" sobre la configuración global. Cuando accedo a wp-login.php, recibo un error 404. Si elimino/cambio el nombre de .htaccess, FilesMatch funciona, pero perdí la función "máscara de ruta", que es necesaria.
Wordpress .htaccess es:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Estoy buscando una manera de que la directiva FilesMatch tenga prioridad sobre .htaccess (módulo Reescribir): solicite la contraseña, no reescriba la URL (dando 404).
¿Algunas ideas?
Respuesta1
Resuelto
Wordpress .htaccess reescribe todo, incluidas las directivas ErrorDocument, que utilizan la autenticación básica HTTP y los códigos de retorno 401 y 403. Tenía archivos SHTML personalizados para ErrorDocument (predeterminado en los servidores cPanel). Entonces, en lugar de solicitar una contraseña, reescribe los encabezados HTTP y solicita la contraseña.ymostrando una página de error 404 al mismo tiempo, volviendo loco al navegador web.
Para solucionarlo, simplemente forcé los mensajes predeterminados de ErrorDocument:
ErrorDocument 401 default
ErrorDocument 403 default