Debian 10 apache2 虚拟主机用于子域名

Debian 10 apache2 虚拟主机用于子域名

我在子域的配置中有Debian 10and 。主域配置:apache2virtual 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 错误。这就是你所要求的吗?

相关内容