A intenção é com o segundo RewriteRule
sob o subdir para enviar o usuário para a raiz, descartando o subdiretório?
O contexto da string passada para sua regex de origem depende do contexto <Directory>
- portanto, uma solicitação para /subdir/something.html
fornecerá às regras /var/www/html
uma sequência de subdir/something.html
para corresponder, enquanto as regras dentro de /var/www/html/subdir
será correspondente a something.html
.
Você pode usar RewriteBase
para substituir o contexto, para que a configuração possa ser corrigida para funcionar como pretendido de duas maneiras; usando um RewriteBase
:
<Directory "/var/www/html/subdir">
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# ... etc etc, no other changes needed
.. ou, alterando o URL de destino para levar o contexto em consideração (a primeira regra nunca corresponderá, pois subdir
não está na string):
<Directory "/var/www/html/subdir">
<IfModule mod_rewrite.c>
RewriteEngine on
<IfModule mod_ssl.c>
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/subdir/$1 [R=301,L]
</IfModule>
</IfModule>
</Directory>