Apache 2.2 ignoring VirtualDocumentRoot VirtualHosts?
-
16-09-2019 - |
Question
I have several domains that I would like to have wildcard subdomains enabled for through mod_vhost_alias
Included in my httpd.conf I have the following generalized rules:
<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>
The problem is that apache is completely ignoring the virtualhosts with the wildcard ServerNames. Any request for test.domain1.com or test.domain2.com will just show the contents of /home/user1/public_html (the default rule according to apache).
Some other information:
/home/user1/subdomains/test
and /home/user2/subdomains/test
both exist and have files in them
All my domains have a wildcard subdomain listed in bind config, and they are pointing to the same IP specified in the Vhost rules. Standard Vhost rules for subdomains work, but not wildcard.
A snipped version of the output of httpd -S
# 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
Any suggestions as to what the problem is would be greatly appreciated.
Solution
I'm such a noob, it was a real simple solution.
ServerName
does not allow wildcards, but ServerAlias
does, so I just duplicated the servername again.
Here is the final minimized config for domains anyone who happens to find this answer (I hate it when you search on google and find questions but no answers):
<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>
OTHER TIPS
David, this solution that stops mod_rewrite cycle when success will be useful for your problem).
Rewrite round-robin stopper:
RewriteCond %{ENV:REDIRECT_STATUS} 200|[45]0[0-9] RewriteRule .* - [L]