Host virtual do Apache com alias

2

Eu tenho um host virtual em execução na minha cópia local do Apache. Tem um alias.

<VirtualHost 127.0.0.1>
        ServerName oliverash.me.dev
        DocumentRoot "/usr/docs/oliverash.me/public"
        Alias /mayor "/usr/docs/uni/tmosct/public"
</VirtualHost>

Isso funciona bem. Eu posso acessar o alias indo para oliverash.me.dev/mayor no meu navegador. No entanto, eu tenho um simples .htaccess rewrite na pasta alias ', que reescreve tudo (exceto pastas) para a página index.php. Esta reescrita está funcionando bem.

Embora a reescrita esteja funcionando, a reescrita retorna com um erro 404 Not Found. Por exemplo, se eu for para oliverash.me.dev/mayor/abcdefg , que reescreve para o arquivo index.php , mas recebo este erro:

"O URL solicitado /usr/docs/uni/tmosct/public/index.php não foi encontrado neste servidor."

Este arquivo existe realmente. Posso acessá-lo diretamente.

Quando eu uso o mesmo alias, mas para localhost em vez de apenas este host virtual, a reescrita funciona bem, e o index.php retorna com o arquivo real, e não o 404. Isso me faz pensar que é algo para fazer com as permissões do meu host virtual. Então eu tentei adicionar isso abaixo do meu httpd-vhosts.conf (sem sorte):

<Directory "/usr/docs/oliverash.me/public">
        AllowOverride All
        Order allow,deny
        Allow from all
</Directory>

Estas são as mesmas configurações que são usadas no localhost ' DocumentRoot , então não vejo por que não está ajudando.

ATUALIZAÇÃO:

Então eu verifiquei o error_log do Apache. Acontece que as reescritas para este alias são realmente relativas à raiz do documento deste host virtual.

[Fri Jan 06 22:30:57 2012] [error] [client 127.0.0.1] File does not exist: /usr/docs/oliverash.me.dev/usr

Esta reescrita está realmente procurando em /usr/docs/oliverash.me.dev/public/usr/docs/uni/tmosct/public para index.php. Espero que seja óbvio que deva procurar em /usr/docs/oliverash.me.dev .

UPDATE 2:

Ok, este é um problema que estou tendo uma cópia local do Apache. No entanto, acabei de encontrar exatamente o mesmo problema para um alias no meu servidor da Web ao vivo. Isso não está usando nenhum tipo de host virtual.

[Sat Jan 07 02:41:51 2012] [error] [client 86.11.223.135] File does not exist: /var/www/html/var

Novamente, o caminho é relativo ao DocumentRoot. Deve ser um caminho absoluto.

Meio chato: (

UPDATE 3:

Este é exatamente o problema que estou tendo, mas talvez seja muito mais bem formulado: link

    
por Oliver Joseph Ash 06.01.2012 / 21:17

2 respostas

6

Solução : O RewriteBase tem que ser o mesmo que a definição do Alias, não o caminho / diretório físico no sistema de arquivos!

Verifique a diretiva RewriteBase para o mod_rewrite, parece que pode estar relacionado a isso. Leia sobre isso em: link

Editar 1 :
Para testar isso, configurei um Ubuntu limpo e fresco no VMware, uma instalação limpa do apache2 e criei uma nova pasta fora do caminho normal, depois configurei um .htaccess e fiz com que funcionasse com uma regra RewriteBase adequada. O DocumentRoot padrão é / var / www, eu coloquei um index.php lá apenas para mostrar onde estou. Ele ecoa "Eu sou index.php no padrão!". Então eu criei este Alias na configuração do Apaches:

Alias /testberg /home/www/testberg
<Directory "/home/www/testberg">
    Options +Indexes
    AllowOverride All
</Directory>

E aí eu coloco outro index.php dizendo "Eu sou index.php em testberg!". Em / home / www / testberg eu criei um .htaccess com o seguinte conteúdo:

RewriteEngine On
RewriteBase /testberg
RewriteRule ^apa.test$ index.php

Quando eu navego para link eu vejo agora: "Eu sou index.php em testberg!" e sem erros no arquivo de log do Apaches, etc.

Não é isso que você queria realizar?

Editar 2 :
Tentando com um host virtual diferente. Na minha área de trabalho do Windows, apontei o ahntest.net para o meu VMware IP em c:\windows\system32\drivers\etc\hosts . No meu servidor VMware, eu criei /home/www/ahntest.net e coloquei um index.php modificado lá para ecoar "Eu sou index.php em ahntest.net!" e criou o seguinte host virtual:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName ahntest.net
    DocumentRoot /home/www/ahntest.net

    Alias /testberg /home/www/testberg
    <Directory "/home/www/testberg">
        Options +Indexes
        AllowOverride All
    </Directory>
</VirtualHost>

Navegar para o link me mostra "Eu sou index.php em ahntest.net!", navegando para link me dá" Eu sou index.php em testberg! " e, finalmente, navegando para link me dá "eu sou index.php em testberg!" por isso funciona muito bem aqui também do que eu posso dizer. O .htaccess / patch em Edit 2 é o mesmo que em Edit 1 acima.

    
por 07.01.2012 / 00:59
1

O que você precisa é de um contêiner de diretório para o destino do alias

<Directory "/usr/docs/uni/tmosct/public">
  ...
</Directory>

UPDATE

Você tem que colocar o container Directory dentro do container VirtualHost para eles trabalharem para o host virtual.

UPDATE 2

Verificando rapidamente o jsFiddle, você precisa de um

NameVirtualHost *:80

acima do container e em seguida você deve reescrever o

<VirtualHost 127.0.0.1>

em

<VirtualHost *:80>

e, por último, você precisa de uma entrada no arquivo de hosts para que a URL seja resolvida.

    
por 06.01.2012 / 21:23