我想要做的是在访问域名时显示一个页面,但如果有人尝试直接通过 IP 访问(而不使用域名),我想向他显示另一个页面。
基于经典名称的 Apache 托管对吗?
好吧,我唯一的问题是我应该在 ServerName 和/或 ServerAlias 中输入什么?
到目前为止我所做的就是取消注释此行:
NameVirtualHost *:80
我已经设置了 2 个虚拟主机,如下所示(具体信息隐藏):
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/vhosts/default/
ServerName {my-dedicated-ip}
ErrorLog /var/www/vhosts/default/error.log
CustomLog /var/www/vhosts/default/custom.log gk
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/vhosts/something/httpdocs/
ServerName valid-domain.com
ServerAlias *.valid-domain.com
ErrorLog "| /usr/sbin/rotatelogs -l /var/www/vhosts/something/logs/error.log.%Y.%m.%d 86400"
CustomLog "| /usr/sbin/rotatelogs -l /var/www/vhosts/somthing/logs/custom.log.%Y.%m.%d 86400" gk
</VirtualHost>
但不幸的是,它不起作用。
提前致谢。
编辑:哦,我有一个专用IP。
我也刚刚发现了这个:如何让 Apache 不响应仅 IP 请求?根据此,我的设置应该可以工作。它应该访问它找到的第一个虚拟主机。但是它没有。它转到了第二个。
编辑:apachectl -S 输出:
[root@me conf.d]# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server domain.com (/etc/httpd/conf/httpd.conf:1015)
port 80 namevhost {my-dedicated-ip} (/etc/httpd/conf/httpd.conf:1015)
port 80 namevhost valid-domain.com (/etc/httpd/conf/httpd.conf:1023)
wild alias *.vaild-domain.com
Syntax OK
是的,这两个虚拟主机位于同一个文件中。
答案1
在 Apache 2.2 中,您可以指定默认虚拟主机该_default_
指令应与 IP 地址以及后续 VirtualHost 条目中未明确定义为 ServerName 或 ServerAlias 的所有域名匹配。
例如:
<VirtualHost _default_:80>
DocumentRoot /var/www/vhosts/default/
ServerName default
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/something/httpdocs/
ServerName valid-domain.com
</VirtualHost>