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

3

Esta é uma pergunta de acompanhamento de minhas pergunta neste site. Talvez eu deva salientar que o servidor Apache está sendo executado em um sistema Windows, não sei se isso é importante.

Meu problema é o seguinte:
Eu tenho 2 unidades J: e K :, ambos têm um teste de diretório ( J: / teste / e K: / teste / )
J: / test / contém o arquivo pink.html em K: / test / contém os arquivos red.html e < strong> blue.html
Desejo acessar todos os arquivos em J: / test / e K: / test / com o mesmo URL:

Este é um trecho do meu arquivo httpd.conf:

Alias /test/ "J:/test/"
Alias /test2/ "K:/test/"

<Directory "J:/test/">
Order allow,deny
Allow from all

Options All MultiViews
AllowOverride None


RewriteEngine on

RewriteCond /test/%(REQUEST_FILENAME) !-f #if we can't find the file in /test/
RewriteRule ^(.+) /test2/$1 [L]   #rewrite url into /test2/something.html

RewriteCond /test/%(REQUEST_FILENAME) -f #if we find the file in /test/
RewriteRule ^(.+) /test/$1    #should this even be necessary ?


</Directory>  

Isso funciona apenas parcialmente. Eu posso acessar o red.html e o blue.html na unidade K: mas não o pink.html na unidade J :. Parece ignorar totalmente o segundo par RewriteCond-RewriteRule . Como configuro o httpd.conf para acessar o pink.html?
Eu tentei várias abordagens, mas sem uso :-( Espero que minha pergunta seja clara e que alguém possa lançar alguma luz sobre esse assunto.
Desde já, obrigado! / Alex

    
por Alex F 02.10.2009 / 15:31

3 respostas

1

Tente isso,

RewriteRule ^(.+) /test/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test/(.+) /test2/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test2/(.+) /test3/$1

...

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test1E+10/(.+) http://www.google.com/search?q=where-is-$1 [L]
    
por 13.12.2009 / 17:43
0

No Linux, você poderia fazer isso no nível do sistema de arquivos, pois há vários sistemas de arquivos que suportam a união de outros sistemas de arquivos dessa maneira (mesmo no modo leitura + gravação), mas não acho que haja uma maneira de fazer isso no Windows. / p>

Outra opção, novamente no nível do SO, em vez do Apache, pode ser colocar todos os arquivos em um único lugar como links simbólicos. Isso é possível no Windows se você estiver usando sistemas de arquivos NTFS usando utilitários como este da SysInternals .

    
por 02.10.2009 / 17:25
0

Você não deve precisar da segunda combinação RewriteCond / Rule, já que basicamente você está tentando dizer ao Apache para fazer a mesma coisa que faria de qualquer maneira. Basicamente, a ação padrão se um arquivo é encontrado onde foi perguntado (/test/pink.html) é para servir ao cliente.

Eu moveria esses Rewrite * para fora da sua construção do Directory; Esse contêiner é mais comumente usado para restrições de acesso, o que você está fazendo é um redirecionamento lógico. Depois de mover o Rewrite * para fora e se livrar da segunda estrofe, edite seu RewriteCond para usar os caracteres {} e not (), pois é dessa forma que é feito.

Se depois de tudo isso ainda não funcionar, adicione estas duas linhas:

RewriteLog "c:/rwlog.txt"
RewriteLogLevel 7

... reinicie o Apache, teste e leia o arquivo de log para descobrir o que o próximo Apache não gosta.

    
por 16.12.2009 / 01:25