Host virtual em um subdiretório [duplicado]

1

Estou trabalhando em um projeto da web do Zend e há uma exigência de que funcione. bom no domínio superior e em um domínio + caminhos de diretório como este:

www.myDomain.com
www.myDomain.com/somedir/myproject/

Há uma boa implementação no projeto por não para criar o basePath e incluir arquivos adequadamente (eu herdei o código de um desenvolvedor desconhecido, mas bom);

Mas não consigo configurar meus VHosts para testar o segundo caso www.myDomain.com/somedir/myproject/ se todos os meus includes funcionarem corretamente.

Minha configuração atual é a mais simples possível:

#hosts
127.0.0.1       www.myDomain.com

.

#httpd-vhosts.conf
NameVirtualHost *:80
<Directory C:/Projects>
  Order Deny,Allow
  Allow from all
</Directory>

<VirtualHost *:80>
  DocumentRoot C:\wamp\www
  ServerName localhost
</VirtualHost>   

<VirtualHost *:80>
    DocumentRoot "C:\Projects\MyProject\public_html"
    ServerName  "www.myDomain.com"
</VirtualHost>

#@ToDo make this work ...
#<VirtualHost *:80>
#    DocumentRoot "C:\Projects\MyProject\public_html"
#    ServerName  "www.myDomain.com/somedir/myproject/"
#</VirtualHost>

Posso fazer isso apenas com o host virtual? Qual é a melhor prática para conseguir essa configuração na máquina local?

EDITAR: O projeto usa Zend e Arquitetura do Front Controller (todas as requisições são redirecionadas para index.php) e a regra de reescrita atual no .htaccess é:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L]
    
por d.raev 09.04.2013 / 10:02

1 resposta

5

O que você precisa é um alias, não vhost. Virtualhosts trabalha com nomes de host, não hostname + diretório.

<VirtualHost *:80>
  DocumentRoot "C:\Projects\MyProject\public_html"
  ServerName  "www.myDomain.com"

  Alias /somedir/myproject  "C:\Projects\MyProject\public_html"
</VirtualHost>

Editar:

O problema do OP parece ser um pouco diferente, e sua solução é enviar tudo o que não é um arquivo físico real para o index.php, usando um RewriteRule no arquivo .htaccess. Isso funciona, mas colocá-los em seu httpd.conf (ou um deles, se ele estiver incluído) é mais eficiente.

Existe uma maneira de você mover facilmente o RewriteRules de .htaccess para o httpd.conf sem precisar alterá-los: Use contêineres.

Então, se você tem um .htaccess em, por exemplo, / var / www / myproject, você pode mover para o httpd.conf desta forma.

<Directory /var/www/myproject>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L]
</directory>

A vantagem em colocar as regras em arquivos .htaccess é que um arquivo .htaccess é lido para cada solicitação. Então é melhor não ter nada. Você pode mover o RewriteRule para fora de seu contexto de diretório (para evitar um redirecionamento interno em cada correspondência). Mas você teria que modificar o padrão, pois em um contexto de servidor é o URL inteiro com o qual você está correspondendo, não apenas a parte depois do diretório.

    
por 09.04.2013 / 13:25