나는 하위 도메인을 구성하고 있습니다 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을 입력하면 system.com 디렉토리의 index.html이 표시됩니다. api.system.com을 입력하면 api.system.com 폴더에 index.html이 표시됩니다.
명령 출력 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을 입력하면 api.system.com 디렉터리에서 index.html의 콘텐츠를 가져옵니다. 하지만 예를 들어 api55.system.com을 입력하면 api.system.com에서 index.html도 가져옵니다. api41.system.com 등에 대해서도 동일한 결과가 나타납니다. 이러한 도메인이 존재하지 않고 이러한 도메인에 대한 가상 호스트에 구성이 존재하지 않지만
특정 도메인에 대해서만 index.html을 가져오도록 가상 호스트를 구성하려면 어떻게 해야 합니까? 두 번째 도메인을 추가하면 해당 하위 도메인에 대해 가상 호스트에 할당된 폴더에서만 파일을 가져와야 하기 때문입니다.
답변1
나는 당신이 탐색하고 있는 모든 호스트가 동일한 IP 주소를 가지고 있다고 가정합니다. 아마도 이것이 도움이 될 것입니다
RewriteEngine on
RewriteCond %{HTTP_HOST} !^api.system.com
RewriteRule ^ - [L,R=404]
내 시스템에서 테스트하지는 않았지만 api.system.com 이외의 URL을 탐색할 때 404 오류가 반환되어야 합니다. 이것이 당신이 요구하는 것입니까?