Alias se o diretório não existir

2

Eu tenho um monte de clientes que têm projetos de sites diferentes, mas todos executam no mesmo CMS de back-end. Todos eles compartilham um tema de administração comum, que está localizado em /home/public/skins/admin - para o qual cada cliente possui um alias.

Funciona bem, mas agora pode haver mais dois clientes que compartilharão o mesmo design. Portanto, faria sentido mover o design para /home/public/skins/design .

Eu poderia usar um alias simples de /skins/ /home/public/skins/ , mas para alguns clientes mais antigos, a pasta /skins/ ainda precisa estar acessível como é atualmente - já que cada site que usa o mesmo CMS inclui o mesmo arquivo de configuração do Alias Seria confuso manter alguns clientes usando uma configuração e outros um conjunto diferente.

Então, minha pergunta é: Posso definir um alias para olhar para a pasta /home/public/skins somente se a pasta real não existir. Como estruturas de diretório em cascata, eu acho.

/skins/design - se existir, não faça nada e deixe o diretório padrão fazer o trabalho. caso contrário, olhe para /home/public/skins

Estou aberto a usar links simbólicos, mas gosto de ter apelidos para facilidade de uso.

Obrigado

    
por Ashley 23.04.2012 / 10:29

1 resposta

1

Atualização: Acabei de notar que esta seção no manual do mod_rewrite, que descreve bastante muito um cenário que se encaixa no seu caso de uso

Eu posso pensar em duas opções no apache e, em seguida, uma terceira é voltar para um script bash para gerar os aliases corretos condicionalmente.

1) A melhor maneira, obviamente, é usar mod_rewrite para re-escrever a requisição condicionalmente.

Minha primeira ideia seria uma captura brutal, para capturar qualquer arquivo que faltasse, e redirecioná-lo para a localização padrão do caminho do arquivo;

RewriteEngine On
RewriteCond  %{DOCUMENT_ROOT}/%{REQUEST_URI}  !-f
RewriteCond  %{DOCUMENT_ROOT}/%{REQUEST_URI}  !-d
RewriteRule  ^/skins/(.*)$               /home/public/skins/admin/$1

2) use mod_perl para selecionar condicionalmente os aliases com uma sub-rotina inline-perl

3) use bash

 for foo in user1 user2 user3; do
 [ ! -d /home/someuser/skins -a ! -L /home/someuser/skins ] && ln -s /home/public/skins /home/someuser/skins
 done

(há uma nota sobre sinalizadores de substituição, se você quiser misturar sinalizadores mod_alias e mod_rewrite em docs ... link )

    
por 23.04.2012 / 10:57