Apache 2.2 ignorando VirtualDocumentRoot VirtualHosts?
-
16-09-2019 - |
Pergunta
Eu tenho vários domínios que eu gostaria de ter subdomínios curinga habilitado para através mod_vhost_alias
incluído no meu httpd.conf Eu tenho as seguintes regras generalizadas:
<VirtualHost [ip here]:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /home/user1/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName *.domain1.com
VirtualDocumentRoot /home/user1/subdomains/%-3+
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /home/user2/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName *.domain2.com
VirtualDocumentRoot /home/user2/subdomains/%-3+
</VirtualHost>
O problema é que o Apache está ignorando completamente os VirtualHosts com os ServerNames curinga. Qualquer pedido de test.domain1.com ou test.domain2.com só vai mostrar o conteúdo de / home / user1 / public_html (a regra padrão de acordo com apache).
Algumas outras informações:
/home/user1/subdomains/test
e /home/user2/subdomains/test
ambos existem e têm arquivos neles
Todos os meus domínios têm um subdomínio curinga listados na configuração do ligamento, e eles estão apontando para o mesmo IP especificado nas regras VHost. Padrão VHost regras para subdomínios trabalho, mas não curinga.
A versão da saída do httpd -S
cortou
# httpd -S VirtualHost configuration: [ip here]:80 is a NameVirtualHost default server domain1.com (/etc/httpd/sites/user1:1) port 80 namevhost domain1.com (/etc/httpd/sites/user1:1) port 80 namevhost *.domain1.com (/etc/httpd/sites/user1:14) port 80 namevhost domain2.com (/etc/httpd/sites/user2:1) port 80 namevhost *.domain2.com (/etc/httpd/sites/user2:14) Syntax OK
# httpd -M Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) rewrite_module (shared) auth_basic_module (shared) authz_host_module (shared) include_module (shared) log_config_module (shared) logio_module (shared) mime_magic_module (shared) mime_module (shared) vhost_alias_module (shared) dir_module (shared) suexec_module (shared) php5_module (shared) suphp_module (shared) ssl_module (shared) Syntax OK
Todas as sugestões quanto ao que o problema é seria muito apreciada.
Solução
Eu sou um noob, era uma verdadeira solução simples.
ServerName
não permite wildcards, mas ServerAlias
faz, então eu só duplicado o nome do servidor novamente.
Aqui está a configuração minimizado final para domínios qualquer um que acontece para encontrar essa resposta (eu odeio quando você pesquisa no Google e encontrar perguntas, mas nenhuma resposta):
<VirtualHost [ip here]:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /home/user1/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName domain1.com #<-- The fix. Wildcards not supported in ServerName
ServerAlias *.domain1.com
VirtualDocumentRoot /home/user1/subdomains/%-3+
</VirtualHost>
Outras dicas
David, esta solução que interrompe ciclo mod_rewrite quando o sucesso será útil para o seu problema).
Reescreva rolha de round-robin:
RewriteCond %{ENV:REDIRECT_STATUS} 200|[45]0[0-9] RewriteRule .* - [L]