VirtualDocumentRoot 和域总是路由到本地主机 - 为啥?

Posted

技术标签:

【中文标题】VirtualDocumentRoot 和域总是路由到本地主机 - 为啥?【英文标题】:VirtualDocumentRoot and domains always routing to localhost - why?VirtualDocumentRoot 和域总是路由到本地主机 - 为什么? 【发布时间】:2011-12-16 15:38:56 【问题描述】:

我正在尝试让动态虚拟主机工作,按照文档进行操作,但效果不佳。

这些是我的 HOSTS 文件中的域:

127.0.0.1 walestourism.local.co.uk
127.0.0.1 www.walestourism.local.co.uk
127.0.0.2 walestourism.local.co.uk
127.0.0.2 www.walestourism.local.co.uk

这是来自 httpd.conf:

NameVirtualHost 127.0.0.2
<VirtualHost 127.0.0.2>
ServerName www.walestourism.local.co.uk
ServerAlias walestourism.local.co.uk
DocumentRoot /www/walestourism.local.co.uk
ScriptAlias /cgi-bin/ /www/walestourism.local.co.uk/cgi-bin
</VirtualHost>

在我的所有其他代码中,上述代码的 VirtualHost 部分始终为 *:80。

我的 httpd.conf 中有这段代码:

<Directory C:/www/vhosts>   
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>
<Directory C:/www/vhosts1>   
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>
<Directory C:/www/vhosts.www>   
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>
<Directory C:/www/test2>   
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>
<Directory C:/www/>   
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>

我应该如何解决此错误,因为当我在其中键入域时,它会将我带到 http://localhost 的内容?这是我尝试使用动态虚拟主机添加域时遇到的基本问题。

另外,如果我将浏览器指向“http://localhost/”,我会得到默认的“It Works!”页面,所以我知道我的服务器正在运行,这肯定与 vhosts 配置有关。

我检查了我的错误日志 - 因此没有错误,那么为什么每个域都指向 localhost,即使为它们配置了一个文件夹(/www/ 在这种情况下是 C:/www,我的 Apache/webserver 的目录)。

我是 Apache 这个领域的新手,尽管在谷歌上搜索了一下午,但我不知道如何解决这个问题。

我决定尝试这个来避免执行 cmd > httpd -k restart 每次我添加一个新的虚拟主机进行测试,但是我做错了什么吗?

我在 Apache 2.2 上,使用 Windows 7,使用 php 5.28 [在此提及规范]。

我该怎么办?

非常感谢所有建议!

【问题讨论】:

【参考方案1】:

当您使用基于命名的虚拟主机时,不要使用 127.0.0.2 ... 只需将其全部保留为 127.0.0.1 ... 否则,请检查 apache 的 error_log(在您的 httpd.conf 中定义)以排除故障原因。

另外,让 Apache2 在 Windows 上使用 VHosts 你开始使用 PHP ...

根据http://httpd.apache.org/docs/2.0/vhosts/examples.html

 # Ensure that Apache listens on port 80
 Listen 80

 # Listen for virtual host requests on all IP addresses
 NameVirtualHost *:80

 <VirtualHost *:80>
 DocumentRoot /www/example1
 ServerName www.example1.com
 # Other directives here
 </VirtualHost>

 <VirtualHost *:80>
 DocumentRoot /www/example2
 ServerName www.example2.org
 # Other directives here
 </VirtualHost>

【讨论】:

Apache 无论如何都运行良好,它只是基于名称的,我是新手。我需要从 中删除 127.0.0.2 吗? 修改了正确的配置。这将适用于 apache 的所有绑定接口 谢谢!至于基于名称的虚拟主机,我想这意味着不再使用 httpd -k restart 来继续重启?【参考方案2】:

如果虚拟主机配置错误,通常会发生这种情况。由于您在 Windows 上,我不知道如何测试您的配置,在 linux 上您会执行以下操作:

/etc/init.d/httpd configtest

尝试从命令行启动 apache,看看是否有任何错误。如果 Apache 作为服务安装,您可以在 Windows 应用程序事件日志中看到启动错误。

【讨论】:

以上是关于VirtualDocumentRoot 和域总是路由到本地主机 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

VirtualDocumentRoot 处理不存在的文件夹

使用 VirtualDocumentRoot 在 SSL 中进行虚拟主机

Apache 2.2 忽略 VirtualDocumentRoot 虚拟主机?

总是选择难的那条路

设置Laravel项目以使用多个域名

向上的路总是艰难又坎坷,销售易如何摆脱SaaS"魔咒"?