views:

1456

answers:

3

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.

+1  A: 

Ugh I found the problem days later after I initially had this problem, just after I finally try to ask about it too.. =P

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>
Mike
Can you use wildcards in the VirtualDocumentRoot?
Kyle
A: 

Mike, are you running into any problems with mod_rewrite rules and mod_vhost_alias? I get 500 errors when I try to run a domain that uses "pretty URL" (routing) RewriteRules with the VirtualDocumentRoot directive. Apache reports too many internal redirects, and when I debug the RedirectLog, Apache is dropping the directory prefix, rewriting the URL, then re-appending the directory prefix infinitely.

David Rogers
A: 

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]
qfox