Uma localização regexp sempre tem precedência. Isso significa que você deve evitar locais de regexp globais nesses casos. Você pode certamente usá-los como sub-locais na sua configuração de localização. E sim, isso significa duplicação de configuração para tudo que você deseja combinar com locais de regex.
Você pode evitar a correspondência de arquivos desnecessários usando lookbehind negativo em sua expressão regular (cuidado, deve funcionar, mas não testado):
location ~ (?<!wp-admin\/).+\.php$ {
...
}
O mesmo acontece com a localização das suas imagens.
Claro, depois de fazer isso, você deve adicionar sub-locais em sua localização /wp-admin
para arquivos e imagens php:
location /wp-admin {
...
location ~* \.(?:ico|gif|jpe?g|png|svg)$ {
expires max;
add_header Pragma public;
add_header Cache-Control "public";
access_log off;
log_not_found off;
}
}
Quanto a wp-login.php
, há um local exato que tem precedência sobre os locais de regex:
location =/wp-login.php {
...
}
No entanto, você deve especificar as configurações do fastcgi neste local para fazer o PHP-FPM manipular o pedido.
Todos esses truques são possíveis e funcionam, mas exigem muito copiar e colar, pois o local regex não continuará agregando configurações de outros locais e terminará assim que possível.
No seu caso, você pode simplesmente adicionar uma expressão condicional na configuração do seu servidor e evitar todo esse processo de copiar e copiar:
if ( $uri ~ "^\/(wp-admin|wp-login)" ) {
auth_basic "Restricted";
auth_basic_user_file /var/www/.htpasswd;
}
No entanto, o uso da instrução "if" tem muitos problemas possíveis. Você foi avisado .