运行 Ubuntu 12.04 LTS、Apache2.2.22。通过一个 IP 在家庭服务器上运行此程序。运行虚拟主机时出现问题。我在 godaddy 注册了一个域名。假设是 mysite.com,目标是拥有 www.mysite.com 和 test.mysite.com。目前只有 www.mysite.com 可以运行,如果我尝试 test.mysite.com,它会显示 www.mysite.com 的内容(我确实确保两个站点的内容不同)。我在 sites-available 中创建了两个文件并运行了相应的 A2ensite www.mysite.com 和 A2ensite test.mysite.com。以下是两个虚拟主机文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/test.mysite.com
ServerName mysite.com
ServerAlias test.mysite.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/test.mysite.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
这是 www.mysite.com 虚拟主机文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www.mysite.com
ServerName mysite.com
ServerAlias www.mysite.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www.mysite.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
在 GoDaddy 域名管理中,我有一个指向我的公共 IP 的 @,我有一个指向我的公共 IP 的 www 的“A”记录,我有一个指向公共 IP 的 test 的“A”记录。任何帮助我解决我做错的事情的人都将不胜感激。谢谢大家。
答案1
确保您已在以下位置启用虚拟主机
httpd.conf
:NameVirtualHost *:80 NameVirtualHost *:443
ServerName
每个VirtualHost
指令都必须反映其将要服务的主机名。ServerAlias
只应在必要时使用。它应是虚拟主机应响应的附加名称。它不应与 相同ServerName
。当没有其他匹配或客户端未提供 Host: 标头时,第一个
VirtualHost
指令将用作默认指令(旧版本的 HTTP 不需要此标头)。该
<Directory />
指令可能应该在全局配置中,而不是在每个虚拟主机配置中重复。无论哪种方式都可以,我只是一个坚持干净配置的人。
确保在配置文件发生任何更改后重新启动 Apache。
编辑:
我看到了您的回复尝试,表明您收到一条错误消息,提示您未在 上配置 VirtualHosts *:80
。您的虚拟主机位于包含文件中,因此出于某种原因,它必须包含在配置中。
我的第一个猜测是包含路径是错误的(虽然我认为它应该来自包,所以它应该是正确的 - 当然,各种 Linux 发行版使 Apache 变得如此复杂,以至于让我抓狂……但我离题了)。通常相对路径基于 Apache 的安装基础。由于我不确定这是否正确,而且它显然没有加载文件,您可能需要将其更改为绝对路径并查看会发生什么(即 /opt/apache22/enabled-sites,或系统上的任何内容)。
另外,您可以用标准哈希()注释掉那里的行#
,然后添加您自己的行,这样就不会丢失原始配置。
答案2
对于test.mysite.com
设置ServerName
为test.mysite.com
答案3
由于我无法发表评论,我将更新修复问题的方法,以便其他人可能会觉得有用。这是用户错误。我忽略了检查 sites-enabled 文件夹以查看启用了哪些网站,而 test.mysite.com 不在那里。我运行了a2ensite
test.mysite.com
并重新启动 Apache,现在它可以正常工作了。
答案4
每个站点的正确配置应该是这样的
对于 test.mysite.com
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/test.mysite.com
ServerName test.mysite.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/test.mysite.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
对于 mysite.com
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www.mysite.com
ServerName mysite.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www.mysite.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ServerAlias 的工作方式如下。
如果您希望同一个虚拟主机具有其他地址,则可以使用 ServerAlias 示例:
ServerName mysite.com
ServerAl www.mysite.com