Catch all VirtualHost not working

I'm trying to setup a VirtualHost that catches all sub domains that don't many any other VirtualHosts. But with this, I keep getting the index.html and it doesn't take me to the error.php page. My OS is Ubuntu 16.04 and I haven't changed the apache.conf in /etc/apache2. My other VirtualHost is for Nextcloud running at storage.declanmarks.pw.

<VirtualHost *:80>
        DocumentRoot /var/www/main
        ServerName null
        ServerAlias *

        Redirect 404 /error.php
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

I not an expert in Apache.


Solution 1:

For a catch-all i.e. default host you don't need to specify ServerAlias *. Just make sure that this is the first <VirtualHost *:80>.

If the VirtualHost is included from sites-enabled/, you could rename it to begin with prefix 000- or similar, so that it's the first file in alphabetical order. If no other ServerName or ServerAlias matches, Apache will fall back to the first one.