我在我的 Apache 上托管了几个网站:
- 域名-x.com
- 域名-y.com
- 测试域名-y.com
每个站点在 sites-available 中都有自己的文件。Domain-y 为两个站点提供服务,一个带有 ,domain-y.com
另一个带有test.domain-y.com
。
域-x:
<VirtualHost *:80>
ServerName domain-x.com
Redirect permanent / https://domain-x.com/
</VirtualHost>
<VirtualHost <ip>:443>
DocumentRoot /var/www/<folder>
ServerName domain-x.com
ServerAlias "domain-x.com" "www.domain-x.com"
</VirtualHost>
域-y:
<VirtualHost *:80>
ServerName domain-y.com
Redirect permanent / https://domain-y.com/
</VirtualHost>
<VirtualHost <ip>:443>
DocumentRoot /var/www/<folder>
ServerName domain-y.com
ServerAlias "domain-y.com" "www.domain-y.com"
</VirtualHost>
测试域名-y.com
<VirtualHost *:80>
ServerName test.domain-y.com
Redirect permanent / https://test.domain-y.com/
</VirtualHost>
<VirtualHost <ip>:443>
DocumentRoot /var/www/<folder>
ServerName test.domain-y.com
ServerAlias "test.domain-y.com" "www.test.domain-y.com"
</VirtualHost>
这工作正常,但如果不需要,我想禁用 test.domain-y.com 并显示 404。如果我使用 a2dissite 删除站点并将子域站点称为“test.domain-y.com”,则会显示域“domain-y.com”,而不会显示 404。
所以我明白我需要一个捕获所有内容的功能,所以我创建了一个 00-catch.all.conf 来包含以下语句:
<VirtualHost *:80>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
但如果我启用全部捕获,那么子域名站点仍然可用。
有什么提示吗?
谢谢
答案1
首先,您必须确保 catch-all 是 Apache 检查的最后一个虚拟主机,如果它的命名00-catch.all.conf
与您一样,那就应该没问题,然后我们必须检查您的虚拟主机是否覆盖所有必要的端口,分别为 和 的 80和catch-all
443 。HTTP
HTTPS
<VirtualHost *:80>
ServerName default
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:443>
ServerName default
ServerAlias *
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/default.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/default.key"
Redirect 404 /
</VirtualHost>
那么我假设您的服务器有一个默认的 SSL 证书来处理 HTTPS 请求,用它etc/apache2/ssl/default.crt
替换。/etc/apache2/ssl/default.key