Estou confuso com Apache Vhost
Pergunta
Estou construindo um aplicativo da Web com a Zend Framework e preciso apontar meu aplicativo para a pasta "pública" do aplicativo:
Então, basicamente, quando eu ligo http://localhost/myapp
deve ser exibido http://localhost/myapp/public/
Eu criei um arquivo de host virtual chamado myApp em/etc/apache2/sites-anable/:
<VirtualHost *:80>
DocumentRoot /var/www/myapp/public/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/myapp/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Mas não funciona. Quando eu ligo http: // localhost/myapp, Ele exibe a estrutura do diretório do aplicativo e, quando clico na pasta "público", ele exibe o que quero ser exibido por padrão ... Eu nunca configurei o VHOSTS antes e isso é o mais longe possível com os tutoriais sobre isso.
Solução 2
Ok, encontrei um caminho de alguma forma ... não acho que seja necessário da maneira certa/melhor, mas ...
em httpd.conf (na pasta Apache2):
Listen 10089
<VirtualHost *:10089>
DocumentRoot "/var/www/myapp/public"
<Directory "/var/www/myapp/public">
Order allow,deny
Allow from all
AllowOverride all
</Directory>
</VirtualHost>
Meu aplicativo agora está acessível via localhost: 10089 Depois de ativar o mod de reescrita no Apache, adicionei o .htaccess necessário, um na raiz do meu aplicativo, redirecionando tudo para index.php (Zend Framework Apoio a navegação de URL e obras de URL) :
RewriteEngine on
RewriteRule .* index.php
e um segundo arquivo .htaccess dentro da minha pasta pública para permitir que as pessoas acessem os arquivos .jpg, .ico, etc e não sejam redirecionados para indexar para tudo:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
Espero que isso ajude alguns!
Outras dicas
Na sua primeira listagem, você tinha um valor diferente para a etiqueta do diretório, deixando de fora o 'público'. Houve também uma barra atrás do 'público' no valor do Docroot, mas removido em sua segunda tentativa. Não tenho certeza se isso fez a diferença, mas acredito que é recomendável que você não inclua barras à direita.
Além disso, apenas se perguntando ... você está executando isso em uma máquina local? Tive problemas com o Skype querendo usar a porta 80 se eu comecei a executá -lo antes do meu servidor Apache. O Skype usará uma porta diferente se 80 já estiver usado. Caso contrário, o Skype, pode haver outro aplicativo que está usando a porta 80 e interferindo. Pode ser por isso que você teve sucesso em outro porto.