... but if you add a file called
/test/testyou'll see the problem, as the fake alias stops working entirely.
Sim, o segundo arquivo .htaccess no subdiretório evita que o URL seja reescrito (já que a reconfiguração de mod não é herdada por padrão). Você poderia contornar isso apenas com o arquivo .htaccess no documento raiz que reescreve todos os pedidos que ainda não foram reescritos. Por exemplo:
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /test/$1 [L]
A variável de ambiente REDIRECT_STATUS está vazia na solicitação inicial e definida como 200 (OK) após a primeira reescrita bem-sucedida.
No entanto, se você ainda precisar de um arquivo .htaccess no subdiretório (para outras diretivas mod_rewrite), então você precisará:
-
repita essas diretivas nos subdiretórios
.htaccessfile. (Você, então, não precisaria estritamente da diretivaRewriteCondacima no arquivo pai.htaccess.) -
Ou habilite a herança mod_rewrite. Mas eu acho que você lutaria no Apache 2.2. Você provavelmente precisaria de algo como
RewriteOptions InheritBefore(nos subdiretórios.htaccessfile), que está disponível apenas no Apache 2.4.
It just has one problem - it creates multiple valid urls.
O método acima resolve este problema também, uma vez que todos os pedidos são agora reescritos (o que é mais parecido com o comportamento de um Apache Alias na configuração do servidor).
Caso contrário, você precisaria assegurar-se de que o subdiretório base fosse único para poder implementar um redirecionamento canônico de volta à raiz do documento se o subdiretório base fosse acessado diretamente. Por exemplo:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /unique-subdir
RewriteRule (.*) /$1 [R=301,L]
THE_REQUEST contém a primeira linha do cabeçalho da solicitação inicial e não é alterado quando a solicitação é reescrita.