Estou tentando configurar um servidor apache 2.4 com subdomínios maciços usando o ServerAlias. A configuração básica do domínio principal funciona bem (domínio principal = > 200, todos os subdomínios = > 404):
UseCanonicalName Off
<VirtualHost example.com>
ServerName example.com
ServerAlias www.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/httpdocs"
DirectoryIndex index.php index.html
<Directory />
Options +Indexes +FollowSymLinks +Includes
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
AllowOverride All
</Directory>
</VirtualHost>
Mas quando eu adiciono as linhas do meu vhost genérico configurado, o servidor da web retorna um código de status 404 em cada solicitação de vhost (subdomínio):
UseCanonicalName Off
<VirtualHost example.com>
ServerName example.com
ServerAlias www.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/httpdocs"
DirectoryIndex index.php index.html
ServerAlias *.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/%1.0"
DirectoryIndex index.php index.html
<Directory />
Options +Indexes +FollowSymLinks +Includes
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
AllowOverride All
</Directory>
</VirtualHost>
Acho que é necessário fazer algo com o caminho correto da pasta. O caminho da pasta sempre se parece com isto:
/var/www/vhosts/maindomain.com/subdomain.maindomain.com
O que eu preciso é simplesmente uma configuração que corresponda ao domínio principal e sub-domínios genéricos associados a isso. Então,
www.example.com
example.com
corresponde ao caminho da pasta:
/var/www/vhosts/example.com/httpdocs
e
ci.example.com
tracker.example.com
other.example.com
deve corresponder ao seu caminho de pasta como este:
/var/www/vhosts/example.com/ci.example.com
/var/www/vhosts/example.com/tracker.example.com
/var/www/vhosts/example.com/other.example.com
Além disso, por algum motivo estranho, se eu alterá-lo para %0.0
no caminho do subdomínio, os subdomínios funcionarão, mas o domínio principal não. Então, usando isso, é o contrário. Domínio principal = > 404, todos os subdomínios = > 200.
Eu encontrei a explicação para os literais mágicos para nomes de pastas nos documentos do apache 2.4: link
Mas ao invés de resolver meu problema, isso me confunde mais e mais ...
O servidor da web é executado no mínimo do openSUSE 42.2. Como você já sugeriu, o nome do domínio real é alterado aqui para example.com
. Qualquer ajuda para esse problema seria ótima.
Edit: Como eu disse também abaixo no meu comentário para a primeira resposta, eu preciso de uma solução, que não requer necessariamente qualquer RewriteRule
na configuração vhost. Porque eu estou usando sistemas PHP, que têm o seu próprio (por vezes complexo real) RewriteRule
s, então eu não quero entrar em apuros com esse material .htaccess
. Mas quaisquer outras opções, exceto cgi
, são possíveis. E sim, o suporte a links simbólicos está habilitado (ou possível para ativá-lo).
Editar:
O exemplo de link simbólico me ajudou a entender a ideia básica. Um pouco repensar trouxe-me a esta solução abaixo. Primeira regra encontrada sempre se aplica, então funcionou para mim:
UseCanonicalName Off
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/example.com/httpdocs"
ServerName www.example.com
ServerAlias example.com
<Directory />
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/example.com/httpdocs"
ServerName example.com
ServerAlias *.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/%1"
<Directory />
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
Allow from all
</Directory>
</VirtualHost>
apachectl -t
e apachectl -S
diz que está tudo bem. Testado e trabalhado! : -)