How can I stop mail DNS records from showing my main website? [duplicate]
If I have 3 domains, domain1.com, domain2.com, and domain3.com, is it possible to set up a default virtual host to domains not listed? For example, if I would have:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
If you register a domain and point it to my server, it would default to everythingelse showing the same as domain3. Is that possible?
Yes, that should work, except ServerAlias should be "*", with ServerName set to an actual hostname. You might need to make sure that VirtualHost is the very last loaded...
When using name-based virtual hosts, the first virtual host
configuration loaded will be the default (Source: Apache Wiki).
For example, with the configuration below, otherwise unmatched domains
will match with domain-one.com
:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName domain-one.com
# Other options and directives ..
</VirtualHost>
<VirtualHost *:80>
ServerName domain-two.com
# Other options and directives ..
</VirtualHost>
Many servers do not have a monolithic configuration file, but have several host-specific configuration files organized as follows:
/etc/apache2
|-- sites_available (actual configuration files)
`-- sites_enabled (symlinks to files in sites_available)
In this case, to make a particular virtual host configuration load
first, rename the symlink to something which will be first when
sorted, such as 00-default
.
Some of the other answers are not quite correct. According to the
Apache Wiki, not setting a ServerName
in a virtual host is
incorrect. If the host without a ServerName
is not loaded first,
Apache may never even use it, since the first host loaded would be
the default.
Furthermore, while ServerAlias *
will indeed match anything, it may
also override other virtual hosts defined later. Maybe this approach
would work if it's always the last virtual host to be defined (as in
the configuration given in the question), but this means adding a new
directive and changing the sort order instead of just changing the
order as above.
Don't specify a servername, and that becomes your default vhost..
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Also be sure that you haven't specified a DocumentRoot in the main httpd.conf file, as that will take precedence over the vhosts.
Order is important - move your vhost definition for everything else to the head of the list.