Eu criei um caso de teste mínimo, que o que eu acho é a resposta. Por favor, comente se este não é o caso, ou se é apenas uma solução horrível para hackear outra coisa.
Conf SSL não:
<VirtualHost *:80>
ServerName server.com
RewriteEngine On
RewriteRule ^/secret(.*)$ https://%{SERVER_NAME}:8443/secret [R=302,L]
RewriteRule ^/public(.*)$ https://%{SERVER_NAME}:8443/public [R=302,L]
</VirtualHost>
SSL conf:
LoadModule ssl_module modules/mod_ssl.so
NameVirtualHost *:8443
Listen *:8443
<VirtualHost *:8443>
ServerName server.com:8443
UseCanonicalName On
SSLEngine on
# SSL cert/key
SSLCertificateFile /path/to/cert.crt
SSLCertificateChainFile /path/to/cert.chain.crt
SSLCertificateKeyFile /path/to/cert.key
DocumentRoot "/var/www"
<Directory "/var/www/public">
DirectoryIndex index.html index.php
Options -Indexes FollowSymlinks
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/secret">
DirectoryIndex index.php index.html
AuthName "Secret Pages"
AuthType Digest
AuthUserFile /etc/httpd/test-digests
Require valid-user
Options -Indexes FollowSymlinks
AllowOverride None
Order allow,deny
Allow from localhost.localdomain
Satisfy any
</Directory>
</VirtualHost>
Observe a linha ServerName
na configuração SSL. Se eu não colocar a porta não padrão lá, então o redirecionamento Digest parece usar a porta https padrão 443 depois que o nome de usuário / senha for inserido, o que resulta no comportamento que eu esbocei no documento. pergunta original. Quando a porta estiver lá, o comportamento é o necessário.
Portanto, parece que, pelo menos, se o SSL estiver sendo executado em uma porta não padrão e usando a autenticação do Apache Digest (ou eu acho que Básico), é necessário especificar a porta na configuração do ServerName. Isso é algo que eu não vi na documentação.