... but if you add a file called
/test/test
you'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
.htaccess
file. (Você, então, não precisaria estritamente da diretivaRewriteCond
acima 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.htaccess
file), 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.