У меня есть Debian 10
и apache2
и в virtual hosts
конфигурации для поддомена. Конфигурация для основного домена:
<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>
Для моей конфигурации поддомена на виртуальном хосте:
<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>
И теперь, когда я ввожу system.com в своем браузере, он показывает index.html из каталога system.com. Когда я ввожу api.system.com, он показывает index.html из папки api.system.com.
Вывод для команды: 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
Все выглядит нормально, но проблема в поддомене. Когда я ввожу api.system.com, я получаю содержимое index.html из каталога api.system.com. Но когда я ввожу, например, api55.system.com, я получаю index.html из api.system.com. Тот же результат для api41.system.com и т. д. Несмотря на то, что эти домены не существуют и не существует конфигурации в виртуальных хостах для этих доменов
Как настроить виртуальные хосты, чтобы разрешить получить index.html только для определенного домена. Потому что когда я добавляю второй домен, он должен получить файл только из папки, назначенной в виртуальном хосте для данного поддомена
решение1
Я предполагаю, что все хосты, которые вы просматриваете, имеют один и тот же IP-адрес. Возможно, это поможет
RewriteEngine on
RewriteCond %{HTTP_HOST} !^api.system.com
RewriteRule ^ - [L,R=404]
Я не тестировал это на своих собственных системах, но при переходе на любой URL, кроме api.system.com, должна возвращаться ошибка 404. Это то, о чем вы просите?