Configuração do Apache - regra de reescrita para todos os hosts virtuais

3

Eu tenho a seguinte configuração com dois hosts virtuais no meu Apache: www.domain.com e res.domain.com . O primeiro é aberto, o segundo é limitado a usuários registrados.

<VirtualHost *:80>
   ServerName www.domain.com
   DocumentRoot /website/www
   <Directory "/website/www">
      Options FollowSymLinks
      AllowOverride All
      RewriteEngine On  
      RewriteCond %{REQUEST_URI} !api/dispatch\.php$
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^api/.*$ api/dispatch.php [L,QSA]
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName res.domain.com
   DocumentRoot /website/res
   <Directory "/website/res">
      Options FollowSymLinks
      AllowOverride All
      AuthType        Basic
      AuthUserFile    /website/res/users.sec
      <Limit GET POST>
         Require         valid-user
      </Limit>
   </Directory>
</VirtualHost>

Gostaria de atender a todas as chamadas link * exatamente como se fossem link *. Nenhuma autenticação e mesmo comportamento ...

Importante : não quero que meus usuários vejam um redirecionamento ...

Preciso de ajuda porque tentei muitas coisas, mas não tive sucesso.

EDIT 1 A idéia aqui é ter uma parte do site ('api' neste caso) que é acessível livremente (= sem autenticação) de todos os hosts virtuais sem replicar o código.

Pastas:

   /website
     /www
       /img
       /api
       /css
       /...
     /res
       /...

Eu tentei combinar Alias, RewriteRule e Directory ... ex:

<VirtualHost *:80>
   ServerName www.domain.com
   DocumentRoot /website/www
   <Directory "/website/www">
      Options FollowSymLinks
      AllowOverride All
      RewriteEngine On  
      RewriteCond %{REQUEST_URI} !api/dispatch\.php$
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^api/.*$ api/dispatch.php [L,QSA]
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName res.domain.com
   DocumentRoot /website/res
   Alias /api /website/www/api
   <Directory "/website/www/api">
      Options FollowSymLinks
      AllowOverride All
      Satisfy Any
      Allow from all

      RewriteEngine On  
      RewriteCond %{REQUEST_URI} !dispatch\.php$
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^.*$ dispatch.php [L,QSA]
   </Directory>
   <Directory "/website/res">
      Options FollowSymLinks
      AllowOverride All
      AuthType        Basic
      AuthUserFile    /website/res/users.sec
      <Limit GET POST>
         Require         valid-user
      </Limit>
   </Directory>
</VirtualHost>

Nesse caso, a ligação para o link ... ainda é restrita à autenticação básica.

    
por Alban Soupper 16.08.2013 / 16:15

2 respostas

0

Eu entendi!

RewriteBase estava faltando. Eventhough não é obrigatório na configuração do primeiro domínio, é no segundo caso!

Eu também consegui fazer funcionar para qualquer host virtual movendo a configuração do diretório "api" no nível do servidor. Dá:

# API Accessible from all domains
Alias /api /website/www/api
<Directory "/website/www/api">
   Options FollowSymLinks
   AllowOverride None
   Satisfy Any
   Allow from all

   RewriteEngine On
   RewriteBase /api/
   RewriteCond %{REQUEST_URI} !dispatch\.php$
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^.*$ dispatch.php [L,QSA]
</Directory>

# Virtual hosts
<VirtualHost *:80>
   ServerName www.domain.com
   DocumentRoot /website/www
   <Directory "/website/www">
      Options FollowSymLinks
      AllowOverride All
      Order allow,deny
      Allow from all 
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName res.domain.com
   DocumentRoot /website/res
   <Directory "/website/res">
      Options FollowSymLinks
      AllowOverride All
      AuthType        Basic
      AuthUserFile    /website/res/users.sec
      <Limit GET POST>
         Require         valid-user
      </Limit>
   </Directory>
</VirtualHost>

Obrigado @mindthemonkey pelo acionador;)

    
por 19.08.2013 / 16:26
2

Satisfaça . Sua necessidade específica é detalhada no Exigir documentos também.

   <Directory "/website/res/api">
      Satisfy Any
      Allow from all
   </Directory>

Você precisará duplicar qualquer uma das regras de reconfiguração no vhost res.domain.com. Se você quiser que o mesmo conteúdo seja entregue a partir de res.domain.com , talvez seja necessário alias o caminho res.domain.com/api para o diretório /website/www/api .

    
por 16.08.2013 / 17:20