Ich habe Debian 10
und apache2
und in virtual hosts
der Konfiguration für die Subdomäne. Konfiguration für die Hauptdomäne:
<VirtualHost *:80>
ServerName system.com
ServerAlias system.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/system.com
<Directory /var/www/system.com>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Für meine Subdomänenkonfiguration im virtuellen Host:
<VirtualHost *:80>
ServerName api.system.com
ServerAlias api.system.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/api.system.com
<Directory /var/www/api.system.com>
Options -Indexes +FollowSymLinks
AllowOverride All
# Order Allow,Deny
# Allow from All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Und wenn ich jetzt system.com in meinen Browser eingebe, wird index.html aus dem Verzeichnis system.com angezeigt. Wenn ich api.system.com eingebe, wird index.html aus dem Ordner api.system.com angezeigt.
Ausgabe für Befehl: sudo apache2ctl -S
:
my@server088331:/etc/apache2/sites-available$ sudo apache2ctl -S
VirtualHost configuration:
*:80 is a NameVirtualHost
default server api.system.com (/etc/apache2/sites-enabled/api.system.conf:1)
port 80 namevhost api.system.com (/etc/apache2/sites-enabled/api.system.conf:1)
alias api.system.com
port 80 namevhost phpmyadmin.system.com (/etc/apache2/sites-enabled/phpmyadmin.conf:1)
alias phpmyadmin.system.com
port 80 namevhost system.com (/etc/apache2/sites-enabled/system.conf:1)
alias system.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: 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
Alles sieht ok aus, aber das Problem liegt bei der Subdomain. Wenn ich api.system.com eingebe, erhalte ich den Inhalt von index.html aus dem Verzeichnis api.system.com. Aber wenn ich beispielsweise api55.system.com eingebe, erhalte ich auch index.html von api.system.com. Dasselbe Ergebnis gilt für api41.system.com usw. Obwohl diese Domänen nicht existieren und keine Konfiguration in virtuellen Hosts für diese Domänen vorhanden ist
So konfigurieren Sie virtuelle Hosts, damit index.html nur für bestimmte Domänen abgerufen werden kann. Denn wenn ich eine zweite Domäne hinzufüge, sollte nur die Datei aus dem Ordner abgerufen werden, der im virtuellen Host für die angegebene Subdomäne zugewiesen ist.
Antwort1
Ich gehe davon aus, dass alle Hosts, die Sie durchsuchen, dieselbe IP-Adresse haben. Vielleicht hilft das
RewriteEngine on
RewriteCond %{HTTP_HOST} !^api.system.com
RewriteRule ^ - [L,R=404]
Ich habe es nicht auf meinen eigenen Systemen getestet, aber es sollte einen 404-Fehler zurückgeben, wenn ich zu einer anderen URL als api.system.com navigiere. Ist das, wonach Sie fragen?