mod-rewrite: Localizando um arquivo em vários diretórios

1

Aqui está um problema interessante:

Estou tentando separar alguns arquivos em um sistema em vários pacotes e poder acessá-los sem especificar explicitamente em qual pacote um arquivo está.

Veja um exemplo: digamos, um arquivo /package1/one.htm está em /package1 e /package2/two.htm está em /package2 . Com a configuração abaixo, poderei acessá-los diretamente, por exemplo. http://localhost/one.htm

RewriteCond %{DOCUMENT_ROOT}/package1%{REQUEST_URI} -f
RewriteRule ^(.*) /package1$1 [L]

RewriteCond %{DOCUMENT_ROOT}/package2%{REQUEST_URI} -f
RewriteRule ^(.*) /package2$1 [L] 

RewriteCond %{DOCUMENT_ROOT}/package3%{REQUEST_URI} -f
RewriteRule ^(.*) /package3$1 [L]

O problema é que eu gostaria de poder adicionar mais pacotes, sem atualizar este arquivo de configuração do Apache (e sem precisar reiniciar o Apache). Eu estava pensando em algo do tipo:

RewriteCond %{DOCUMENT_ROOT}/package(.*)%{REQUEST_URI} -f
RewriteRule ^(.*) /package%1$1 [L]

Mas, infelizmente, o código acima não funciona, pois não é possível obter uma correspondência do RewriteCond (o (.*) ) e, em seguida, aplicá-lo ao RewriteRule . Pelo menos essa era a minha compreensão disso.

Você consegue pensar em uma maneira criativa de resolver esse problema?

    
por Yuriy Nemtsov 17.12.2009 / 16:32

1 resposta

2

Use um RewriteMap programático:

RewriteMap rewriter prog:/path/to/script
RewriteRule ^(.*) %{rewriter:$1} [L]

E, em seguida, no seu script, pegue qualquer parte do caminho de solicitação desejado, percorra seus diretórios e retorne a string de reconfiguração apropriada.

    
por 17.12.2009 / 17:09