Apache 2.4 multiple sites with different alias and path
Solution 1
ServerName directive should not have a /blah but only [scheme://]domain-name|ip-address[:port]. You should have something like this instead :
<VirtualHost *:80>
DocumentRoot /var/www/
ServerName 192.168.2.134:80
Alias /wiki /var/www/dokuwiki
Alias /sip /var/www/rsip/public
<Directory /var/www/dokuwiki>
Order deny,allow
Allow from all
Options FollowSymLinks
</Directory>
<Directory /var/www/rsip/public/>
AllowOverride All
Require all granted
Options FollowSymLinks
</Directory>
</VirtualHost>
Solution 2
It is not possible to use 2 VirtualHosts on the same Domain (in this case the IP) with different DocumentRoot. Apache would always use only one of the multiple defined VirtualHosts.
ServerName should be only name or IP. The Port is already defined in VirtauHost *:80.
You could to use one VirtualHost for your IP with var/www as DocumentRoot. The Alias is not needed, when both sites a placed under /var/www . Maybe a softlink on the filesystem is better than a Alias in Apache.
Softlinks on filesystem can be made with:
ln -s /var/www/rsip/public /var/www/sip
Daniel
Updated on June 04, 2022Comments
-
Daniel about 2 years
I have installed Ubuntu 16.04 with apache 2.4.18 in my local network.
I want to have two diffrent websites, identified by a
/blah
, there for i want to work with aliases, like:192.168.2.134/wiki
=>/var/www/dokuwiki
192.168.2.134/sip
=>/var/www/rsip/public
(Laravel)For that i have configured
/etc/apache2/sites-available/dokuwiki.conf
with:<VirtualHost *:80> DocumentRoot /var/www/ ServerName 192.168.2.134:80/wiki Alias /wiki /var/www/dokuwiki <Directory /var/www/dokuwiki> Order deny,allow Allow from all Options FollowSymLinks </Directory> </VirtualHost>
And
/etc/apache2/sites-available/rsip.conf
with:<VirtualHost *:80> DocumentRoot /var/www/ ServerName 192.168.2.134:80/sip Alias /sip /var/www/rsip/public <Directory /var/www/rsip/public/> AllowOverride All Require all granted Options FollowSymLinks </Directory> </VirtualHost>
In
/etc/apache2/apache2.conf
there is:<Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /usr/share> AllowOverride None Require all granted </Directory> <Directory /var/www/> Options -Indexes Options FollowSymLinks AllowOverride None Require all granted </Directory>
I have enabled the two sites and reloaded apache2.
Result of
apachectl -S
is:VirtualHost configuration: *:80 is a NameVirtualHost default server 192.168.2.134 (/etc/apache2/sites-enabled/dokuwiki.conf:1) port 80 namevhost 192.168.2.134 (/etc/apache2/sites-enabled/dokuwiki.conf:1) port 80 namevhost 192.168.2.134 (/etc/apache2/sites-enabled/rsip.conf:1) ServerRoot: "/etc/apache2" Main DocumentRoot: "/var/www/html" Main ErrorLog: "/var/log/apache2/error.log" Mutex default: dir="/var/lock/apache2" mechanism=fcntl Mutex mpm-accept: using_defaults Mutex watchdog-callback: using_defaults Mutex rewrite-map: using_defaults PidFile: "/var/run/apache2/apache2.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="www-data" id=33 Group: name="www-data" id=33
Result of
apachectl -M
is:Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) filter_module (shared) mime_module (shared) mpm_prefork_module (shared) negotiation_module (shared) php7_module (shared) rewrite_module (shared) setenvif_module (shared) status_module (shared)
The problem is, the link to
192.168.2.134/wiki
works fine all the time, but the link to192.168.2.134/sip
brings up a404 File not found
and also maps to the wrong path, as i can see in/var/log/apache2/error.log
:[Wed Jul 18 22:00:16.601623 2018] [core:info] [pid 4686] [client 192.168.2.156:25896] AH00128: File does not exist: /var/www/sip/
If i try
192.168.2.134/rsip/public
it works.I think it has to do with the sequence of virtualhosts, like seen when executing
apachectl -S
, like shown above..then if i do
a2dissite dokuwiki.conf
and reload apache2, the link to192.168.2.134/sip
works also fine. When i enable the192.168.2.134/wiki
again, the192.168.2.134/sip
again doesn't works.Is it - in general - possible to do, what i am trying to do?!
btw: in
/var/www/rsip/public/.htaccess
is:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> #Options -MultiViews -Indexes Options -MultiViews </IfModule> RewriteEngine On RewriteBase /sip # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... # RewriteCond %{REQUEST_FILENAME} !-d # RewriteCond %{REQUEST_URI} (.+)/$ # RewriteRule ^ %1 [L,R=301] # Redirect Trailing Slashes... RewriteRule ^(.*)/$ dashboard/$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>