具有通配符 DNS 记录的 Apache 虚拟主机

具有通配符 DNS 记录的 Apache 虚拟主机

以下是我当前的设置:

在我的底部httpd.conf有以下内容:

NameVirtualHost *:80
Include /etc/httpd/conf/vhosts/*


里面/etc/httpd/conf/vhosts有以下文件:

主站点.com.conf:

<VirtualHost *:80>
  DocumentRoot "/var/www/vhosts/mainsite.com"
  ServerName mainsite.com
  ServerAlias www.mainsite.com
  <Directory "/var/www/vhosts/mainsite.com">
    allow from all
    Options -Indexes
  </Directory>
</VirtualHost>

sub1.mainsite.com.conf:

<VirtualHost *:80>
  DocumentRoot /var/www/vhosts/sub1.mainsite.com
  ServerName sub1.mainsite.com
  <Directory "/var/www/vhosts/sub1.mainsite.com">
    allow from all
    Options -Indexes
  </Directory>
</VirtualHost>


到目前为止一切顺利!mainsite.com并且www.mainsite.com两者共享相同的内容DocumentRoot(稍后通过一些重定向,我可以将所有www.mainsite.com用户重定向到mainsite.comSEO)。sub1.mainsite.com也有自己的内容DocumentRoot,不会干扰其他任何东西。

但是, gets和get<Anything that isn't www or sub1>.mainsite.com是一样的。我更希望的是,当任何主机与 不匹配时,都会出现一个错误页面。DocumentRootmainsite.comwww.mainsite.comVirtualHost


现在来谈谈实际问题: 我可以调整什么来获得所需的效果?另外,s 之间通用的目录规则可以VirtualHost重构为吗httpd.conf?如果可以,我是否只需执行以下类似操作?

<Directory "/var/www/vhosts">
  allow from all
  Options -Indexes
</Directory>

答案1

<VirtualHost *:80>
ServerAlias *.mainsite.com
...
... 
</VirtualHost>

应该捕获任何未另行定义的东西。

答案2

我使用最后读取的 catchall vhost 定义

<VirtualHost *:80>
        ServerName      default
        ServerAlias *
        DocumentRoot /var/www/default
        ErrorDocument 404 /404.html
        <Directory "/var/www/default">
            Options All
            AllowOverride None
            allow from All
        </Directory>
</VirtualHost>

默认的 index.html 文件告诉用户在提供的地址上没有什么可看的。404.html 文件也是一样。

相关内容