这是我的 /etc/httpd/conf.d/test.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName test.dev
ServerAlias test.dev.*.xip.io
DocumentRoot /var/www/html/user/test/web
ErrorLog "/var/www/html/user/test/app/logs/httpd_error.log"
CustomLog "/var/www/html/user/test/app/logs/httpd_access.log" combined
<Directory "/var/www/html/user/test/web">
# AllowOverride All # Deprecated
# Order Allow,Deny # Deprecated
# Options All
# Allow from all # Deprecated
# Require all granted # << New way of doing it
Options +FollowSymlinks +Indexes
AllowOverride all
</Directory>
</VirtualHost>
访问http://test.dev.192.168.1.4.xip.io/成功将我重定向到正确的网站。访问http://192.168.1.4/还会将我重定向到同一个网站,而不是我期望看到的索引。此外,访问http://test.dev-some-random-string.192.168.1.4.xip.io/也会将我重定向到同一个网站。
我该如何配置它,以便当我尝试访问测试.dev.192.168.1.4.xip.io,我将在访问时进入我正在编码的页面192.168.1.4.xip.io将显示主页。
我目前正在使用在虚拟机中运行的 centos 6,该虚拟机带有桥接适配器用于网络。这是我的 /etc/httpd/conf/httpd.conf。
答案1
如果您仅定义一个虚拟主机,则所有对 httpd 的请求都将由该虚拟主机处理,无论它们是否与 ServerName 或 ServerAlias 匹配,因为第一个虚拟主机也是默认虚拟主机。在 Apache 中搜索“默认虚拟主机”“基于名称的虚拟主机支持”文档。
还请注意,一旦您定义了任何虚拟主机,默认的 ServerName 就会消失,如果您仍想使用它,则必须定义一个新的 vhost 来重新创建它。请参阅上述链接中的插图“主主机消失”。
因此,尝试定义一个默认虚拟主机,它可以简单到
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
并确保它前配置中的所有其他虚拟主机。然后,任何与其他虚拟主机不匹配的请求都将由该虚拟主机处理。
答案2
您需要为每个要显示的网站定义一个 VirtualHost;即使 192.168.1.4 是主网站,您也需要定义一个 VirtualHost,其中定义“ServerAlias 192.168.1.4”。如果只有一个 VirtualHost,您将始终被重定向到 ServerAlias 中定义的网站。