Apache 2.4 · vhost A

You are on Apache site A

This page was served because your request carried the header Host: apache-a.srv1957161.hstgr.cloud. Apache compared that value against every ServerName it knows, matched this virtual host, and served the index file from this vhost's document root.

What decided this response

SettingValue
ServerApache/2.4 (Alpine)
ServerNameapache-a.srv1957161.hstgr.cloud
DocumentRoot/var/www/site-a
This file/var/www/site-a/index.html
Directory listingOptions -Indexes (off)

The config block behind this page

<VirtualHost *:80>
    ServerName   apache-a.srv1957161.hstgr.cloud
    DocumentRoot /var/www/site-a

    <Directory /var/www/site-a>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    # deliberate 403 -- file exists, config refuses
    <Directory /var/www/site-a/forbidden>
        Require all denied
    </Directory>
</VirtualHost>

Try the failure modes

403 Forbidden → 404 Not Found → Same server, vhost B →

/forbidden/index.html genuinely exists on disk. It returns 403 because Require all denied applies to that directory — the classic case where the file is fine and the config is the problem. Compare with the 404, where the vhost matched correctly but the path does not exist.

Confirm from a shell

curl -sI https://apache-a.srv1957161.hstgr.cloud/  | head -1
curl -s -o /dev/null -w '%{http_code}\n' https://apache-a.srv1957161.hstgr.cloud/forbidden/
curl -s -o /dev/null -w '%{http_code}\n' https://apache-a.srv1957161.hstgr.cloud/nope

# on the server itself:
apachectl -S            # every vhost, and the file:line that defined it
apachectl configtest    # syntax check before any reload