Não há possibilidade de sobrescrever a instrução <Location />
do seu contexto virtualhost no contexto do servidor. De documento do apache :
Sections inside
<VirtualHost>
sections are applied after the corresponding sections outside the virtual host definition. This allows virtual hosts to override the main server configuration.
A ordem de mesclagem é (o último grupo mesclado ganha):
-
<Directory>
(exceto expressões regulares) e .htaccess feitos simultaneamente (com .htaccess, se permitido, sobrescrevendo<Directory>
) -
<DirectoryMatch>
(e<Directory "~">
) -
<Files>
e<FilesMatch>
feitos simultaneamente -
<Location>
e<LocationMatch>
feitos simultaneamente -
<If>
Além de <Directory>
, cada grupo é processado na ordem em que aparecem nos arquivos de configuração.
<VirtualHost>
não é permitido dentro de <If>
, então <Location>
é a última mesclada.
Mas
Se você veicular o site somente em um vhost https (o que seria razoável, por causa da autenticação), poderá fazer o seguinte (sem afetar seu vhost https):
Apache v2.2
<VirtualHost *:80>
ServerName example.com
Include letsencrypt-well-known.conf
RedirectMatch permanent ^(?!/\.well-known/acme-challenge/)(.*) "https://example.com$1"
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
<Location "/">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /var/www/domain/htdocs/.htpasswd
Require valid-user
</Location>
...
</VirtualHost>
letsencrypt-well-known.conf
:
<IfModule mod_proxy.c>
ProxyPass /.well-known !
</IfModule>
Alias /.well-known/ /var/www/html/.well-known/
<Location /.well-known/acme-challenge>
Options None
Require all granted
</Location>
Apache v2.4
<Macro RedirectTo $protocol $domain>
<If "'${well_known_enabled}' == 'On' && %{REQUEST_URI} =~ m#^/\.well-known(/|$)#">
# Do nothing
</If>
<ElseIf "tolower(req('Host')) != '$domain' || tolower(%{REQUEST_SCHEME}) != '$protocol'">
Redirect permanent / $protocol://$domain/
</ElseIf>
</Macro>
<VirtualHost *:80>
ServerName example.com
Include letsencrypt-well-known.conf
RedirectTo https example.com
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
<Location "/">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /var/www/domain/htdocs/.htpasswd
Require valid-user
</Location>
...
</VirtualHost>
letsencrypt-well-known.conf
:
<IfModule mod_proxy.c>
ProxyPass /.well-known !
</IfModule>
Define well_known_enabled On
Define well_known_root "/var/www/html"
Alias /.well-known/ "${well_known_root}/.well-known/
<Directory "${well_known_root}/.well-known">
Options None
AllowOverride None
Require all granted
</Directory>
<Location /.well-known/acme-challenge>
Options None
Require all granted
</Location>