Como posso fazer o Apache procurar em dois diretórios separados com uma URL comum?

1

Será que alguém sabe se há uma maneira de configurar o Apache para que o link da url faça com que o Apache seja buscado song1.mp3 em directory1 ou directory2 ?

Obrigado antecipadamente!
-Alex

    
por Alex F 30.09.2009 / 14:23

4 respostas

2

Existem algumas maneiras de você conseguir isso.

Uma, como foi sugerido, é simplesmente escrever uma página PHP chamada clips.php e ter Options +MultiViews na declaração <Directory> no arquivo httpd.conf ou no arquivo .htaccess no diretório DocumentRoot onde o clips.php está localizado. Eu uso esse método para lidar com meu gerenciador de políticas GPG Key usando PATH_INFO para controlar vários recursos através do mesmo arquivo PHP. Você pode então fazer com que ele parse PATH_INFO para o nome do arquivo solicitado, então procure no diretório o arquivo para retornar ao cliente, certificando-se de definir as funções header() adequadas para o conteúdo antes de começar a transmitir o arquivo.

A outra opção que usei no passado foi determinar qual diretório ( directory1 ou directory2 ) era o principal e fazer /clips/ an Alias para esse diretório. Em seguida, configure uma regra mod_rewrite que verifique a existência dos arquivos no outro diretório e faça com que o Apache entregue essa cópia. Eu usei isso mais no caso em que eu preciso substituir e arquivo existente em um diretório, geralmente substituindo um arquivo com uma cópia mais recente que está em um aplicativo da web.

Ambas as sugestões dependem se você está criando scripts ou se suas habilidades de modificação de configuração são mais strongs. Criando o arquivo PHP pode ser o meio mais versátil para conseguir isso, mas não é de longe o único meio disponível para realizar a mesma tarefa.

    
por 30.09.2009 / 14:49
1

Além do uso criativo de mod_rewrite, você pode querer usar unionfs para mesclar vários diretórios no nível do sistema de arquivos. Em qualquer caso, é uma boa idéia usar "EnableSendfile off" sempre que você servir o FUSE.

    
por 30.09.2009 / 15:01
0

Existem várias maneiras de lidar com isso.

O mais direto é ter 'clips' como um CGI ou outro script que veja o PATH_INFO enviado, e então procure nos diretórios que você quer.

... e para o menos direto ... faça 'clips' apontar para 'directory1', então adicione um manipulador 404 para aquele diretório que irá procurar no directory2, ajustando a resposta se encontrar o arquivo.

    
por 30.09.2009 / 14:29
0

Usando o .htaccess, mod_rewrite e php eu fiz isso antes.

.htaccess se parece com isso, por exemplo:

RewriteEngine on
RewriteRule ^clips\.*$ /path/to/script/script.php?i=$1

No seu script PHP, você obteria as informações do caminho da variável i e da faixa:

$file=basename($_GET['i']);

Sanitize $ file para impedir que qualquer pessoa leia qualquer arquivo no sistema. Em seguida, use expressões PHP para pesquisar e ver qual diretório, se houver, deve ser exibido. Você também pode fazer qualquer tipo de rastreamento ou processamento através deste script php.

    
por 30.09.2009 / 15:10