Virtual Hosts

I have previously used XAMPP with multiple virtual hosts without a problem.

I am now attempting to set up openSuse to do the same.

I have successfully installed Apache2, PHP5 and MySQL.

However I am having issues configuring the virtual hosts and don’t know where it is going wrong.

When I have no virtual hosts defined, I can access http://localhost and subsequently http://localhost/phpMyAdmin no problems.

However, as soon as I define a virtual host, localhost displays the virtual host. Multiple virtual hosts display just one of them. Where have I screwed up the configuration?

/etc/apache2/default-server.conf

#
# Global configuration that will be applicable for all virtual hosts, unless
# deleted here, or overriden elswhere.
# 

DocumentRoot "/srv/www/htdocs"

#
# Configure the DocumentRoot
#
<Directory "/srv/www/htdocs">
        	# Possible values for the Options directive are "None", "All",
	# or any combination of:
	#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
	#
	# Note that "MultiViews" must be named *explicitly* --- "Options All"
	# doesn't give it to you.
	#
	# The Options directive is both complicated and important.  Please see
	# http://httpd.apache.org/docs-2.2/mod/core.html#options
	# for more information.
Options None
        	# AllowOverride controls what directives may be placed in .htaccess files.
	# It can be "All", "None", or any combination of the keywords:
	#   Options FileInfo AuthConfig Limit
AllowOverride None
        	# Controls who can get stuff from this server.
Order allow,deny
 Allow from all
</Directory>

# Aliases: aliases can be added as needed (with no limit). The format is 
# Alias fakename realname
#
# Note that if you include a trailing / on fakename then the server will
# require it to be present in the URL.  So "/icons" isn't aliased in this
# example, only "/icons/".  If the fakename is slash-terminated, then the 
# realname must also be slash terminated, and if the fakename omits the 
# trailing slash, the realname must also omit it.
#
# We include the /icons/ alias for FancyIndexed directory listings.  If you
# do not use FancyIndexing, you may comment this out.
#
Alias /icons/ "/usr/share/apache2/icons/"

<Directory "/usr/share/apache2/icons">
 Options Indexes MultiViews
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/srv/www/cgi-bin">
 AllowOverride None
 Options +ExecCGI -Includes
 Order allow,deny
 Allow from all
</Directory>

# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received.
#
# To disable it, simply remove userdir from the list of modules in APACHE_MODULES 
# in /etc/sysconfig/apache2.
#
<IfModule mod_userdir.c>
        	# Note that the name of the user directory ("public_html") cannot simply be
	# changed here, since it is a compile time setting. The apache package
	# would have to be rebuilt. You could work around by deleting
	# /usr/sbin/suexec, but then all scripts from the directories would be
	# executed with the UID of the webserver.
UserDir public_html
        	# The actual configuration of the directory is in
	# /etc/apache2/mod_userdir.conf.
Include /etc/apache2/mod_userdir.conf
</IfModule>


# Include all *.conf files from /etc/apache2/conf.d/.
#
# This is mostly meant as a place for other RPM packages to drop in their
# configuration snippet.
#
# You can comment this out here if you want those bits include only in a
# certain virtual host, but not here.
#
Include /etc/apache2/conf.d/*.conf

# The manual... if it is installed ('?' means it won't complain)
Include /etc/apache2/conf.d/apache2-manual?conf
ServerName localhost

ServerAdmin root@linux-15qx

RewriteEngine On

/etc/apache2/vhosts.d/dev.fantasticvisions.net.conf

<VirtualHost *:80>
	ServerName dev.fantasticvisions.net
	ServerAdmin admin@dev.fantasticvisions.net
	HostnameLookups Off
	UseCanonicalName On
	ServerSignature On
	DocumentRoot "/media/Manifest-2TB/Projects/Fantastic Visions/Website-MUBP/public_html"
	<Directory "/media/Manifest-2TB/Projects/Fantastic Visions/Website-MUBP/public_html">
		Options Indexes FollowSymLinks MultiViews
		AllowOverride all
		Order allow,deny
		Allow from all
	</Directory>
	DirectoryIndex index.php
	ErrorLog /var/log/apache2/dev.fantasticvisions.net-error_log
	CustomLog /var/log/apache2/dev.fantasticvisions.net-access_log common
</VirtualHost>

I can now serve multiple virtual hosts.

The end of /etc/apache2/default-server.conf had an incorrect entry.

ServerName linux-15qx

ServerAdmin root@linux-15qx

RewriteEngine On
NameVirtualHost *:80

According to the documentation here: Name-based Virtual Host Support - Apache HTTP Server

NameVirtualHost and <VirtualHost> have to agree. So both need to point at the same IP. * being a wildcard.

NameVirtualHost *:80
<VirtualHost *:80>

I also have to define “localhost” along with the other virtual hosts for it to work, otherwise Apache serves up one of the virtual hosts instead.

I also had to make sure that DirectoryIndex was also serving the correct index files.

DirectoryIndex index.php index.html