我只是想将 vhost 中尚未提及的所有子域ServerName
重定向到空子域。我尝试将此添加到我的 httpd.conf 中,位于此域的所有其他虚拟主机之后。
<VirtualHost *:80>
ServerName *.example.com
RedirectPermanent / http://example.com/
</VirtualHost>
空子域(之前加载)的部分内容如下。
<VirtualHost *:80>
DocumentRoot /var/www/example/htdocs
ServerName example.com
<Directory /var/www/example/htdocs>
Options FollowSymLinks
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
重启 httpd 服务后,当我将浏览器指向 时,我看到 403 Forbidden abc.example.com
。我做错了什么?我希望不需要像描述的那样基于正则表达式的匹配在其他答案中来完成这个简单的任务。
答案1
只需在主块下方添加一个块即可虚拟主机配置文件。只需ServerAlias
使用通配符指定*
子域即可。最后,使用 指定重定向地址RedirectPermanent
。
Listen 80
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName example.com
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerAlias *.example.com
RedirectPermanent / http://example.com/
</VirtualHost>
答案2
<VirtualHost *:80>
DocumentRoot "/var/www/example"
ServerName *.example.org
RedirectPermanent / http://example.com/
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/example/htdocs"
ServerName example.org
<Directory /var/www/example/htdocs>
Options FollowSymLinks
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
对于错误 403,可能您没有设置默认文档,因此它尝试访问文件夹内容。对于默认文档,您可以使用例如
DirectoryIndex index.html Index.htm index.php