I am developing a site, which will make use of any given [variation of] subdomain name part (that is, the part prefixed before the host name and, optionally, the TLD part). I would imagine that in production, that would be an easy feat - make sure the DNS for second-level domain name part points to an IP, set up Apache2 virtual host to listen on that (or any) IP port 80, and just use PHP to make decisions based on the "Host" request header.
However, currently the site is localhost, since I am developing it using my workstation, so first I patched the /etc/hosts to include:
127.0.0.1 mydomain
I only used one name part (arguably a custom TLD) so as to not interfere with the Internet domain names. Then I set up a VirtualHost directive for Apache 2.2 like:
<VirtualHost *:80>
ServerName mydomain
But now I can see that f.e. example.mydomain does not point to localhost, meaning the the /etc/hosts addition is not effective for "something.mydomain". It appears the rules are taken verbatim, and also I have checked that wildcards like *.mydomain are not allowed.
Is there a solution for this?
If you are on Linux (and I assume you are, since you mentioned /etc/hosts), you can try dnsmasq for this. I use it at times for quick testing and local DNS overrides.
Steps required:
Configure your station to use dnsmasq for DNS resolution.
Edit
/etc/resolv.conf
and put:The side effect of this is local DNS caching, which normally is another plus (though be aware of this).
Modify dnsmasq configuration.
Edit
/etc/dnsmasq.conf
:You need to put the root domain here, it should resolve all subdomains to localhost this way.
Restart dnsmasq
Verify with
host example.com
andhost subdomain.example.com
. Both should be pointing to localhost.