虚拟主机 - 全部重定向到 WAMP 本地主机“主页”页面

Posted

技术标签:

【中文标题】虚拟主机 - 全部重定向到 WAMP 本地主机“主页”页面【英文标题】:Virtual Hosts - all redirect to the WAMP localhost 'home' page 【发布时间】:2014-02-17 17:31:28 【问题描述】:

我已经在我的 Windows 8 PC 上安装了最新版本的 WAMP - 我似乎无法让多个虚拟主机工作,我加载的每个本地 URL 都会显示 WAMP 主页。

谁能解释我做错了什么?

// My hosts file
127.0.0.1   localhost   
127.0.0.1   client1.localhost
127.0.0.1   client2.localhost

我的 WAMP 目录中有两个文件夹,'client1' 和 'client2' 显然每个文件夹都会关联上面主机文件中的 client1 和 client2。

// My virtual hosts file
<VirtualHost *:80>
  ServerName localhost
  DocumentRoot "C:\wamp\www"
</VirtualHost>

<VirtualHost *:80>
  ServerName client1.localhost
  DocumentRoot "C:\wamp\www\client1"
<Directory "C:\wamp\www\client1">
  allow from all
  order allow,deny
  AllowOverride All
</Directory>
 DirectoryIndex index.html index.php
</VirtualHost>

<VirtualHost *:80>
  ServerName client2.localhost
  DocumentRoot "C:\wamp\www\client2"
<Directory "C:\wamp\www\client2">
  allow from all
  order allow,deny
  AllowOverride All
</Directory>
  DirectoryIndex index.html index.php
 </VirtualHost>

【问题讨论】:

是否引用了hosts文件? 抱歉,我不确定.. 引用的意思是什么? 【参考方案1】:

您的主机文件看起来不错,但您的虚拟主机定义不太好。

如果您更改您的hosts 文件,您可以通过使用Runs as Administrator 启动的命令窗口或简单重启来重新加载Windows 缓存:-

net stop "DNS Client"

然后当它完成时做

net start "DNS Client"

由于服务名称中有空格,所以需要引号!!

DNS 客户端服务缓存访问的域名,并在启动时预加载存在于HOSTS 文件中的域名,或者如果您按上述方式重新启动服务。

在调试新的 vhost 定义时,请记住,如果您尝试访问的定义有问题,Apache 将始终默认为 vhost 定义文件中定义的第一个 vhost。因此,如果这就是您最终到达的地方,即 WAMP 主页,您可以假设您在定义该虚拟主机时犯了一个错误。

这也意味着,如果你用Require local 之类的东西定义第一个虚拟主机定义,你的系统上的随机黑客也应该被发送到那里,如果它的安全设置为Require local,黑客应该收到一个 404 错误可能会阻止进一步的黑客攻击。

// My virtual hosts file
<VirtualHost *:80>
  ServerName localhost
  DocumentRoot "C:\wamp\www"
  <Directory "C:\wamp\www">
     AllowOverride All
     # never want to allow access to your wamp home page area to anyone other than This PC
     # plus us the Apache 2.4.x syntax and not the 2.2 syntax
     Require local
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerName client1.localhost
  DocumentRoot "C:\wamp\www\client1"
  <Directory "C:\wamp\www\client1">
     AllowOverride all
     # use Apache 2.4 syntax to all access to your internal network only
     Require ip 192.168.0
     # Or if you really want to give access to the whole internet uncomment this and comment the previous line
     #Require all granted
 </Directory>
 DirectoryIndex index.html index.php
</VirtualHost>

<VirtualHost *:80>
  ServerName client2.localhost
  DocumentRoot "C:\wamp\www\client2"
  <Directory "C:\wamp\www\client2">
     AllowOverride all
     # use Apache 2.4 syntax to all access to your internal network only
     Require ip 192.168.0
     # Or if you really want to give access to the whole internet uncomment this and comment the previous line
     #Require all granted
  </Directory>
  DirectoryIndex index.html index.php
 </VirtualHost>

如果您实际上并不希望允许全世界访问这些客户端站点,但您确实希望能够从内部网络上的其他 PC 访问该站点,那么更好的访问机制是使用 @987654329 @。请注意仅使用子网的前 3 个四分位数(您的可能不是 192.168.0,但很多路由器默认使用该值。首先检查您的子网)

此外,如果您确实希望全世界都能看到这些客户端站点,那么您还必须Port Forward 您的路由器。

另外,如果您不打算让全世界都可以访问这些网站,而只是听从了不好的建议,那么对所有这些网站的更安全的定义是使用Require local,因此您只能访问它们来自运行 WAMP 的 PC。

WAMPServer 2.4,我假设你的意思是当你说你正在运行最新版本的 WAMPServer 时,实际上改变了你可以包含虚拟主机定义的方式。好吧,实际上它包含了一种新方式,并保留了旧方式。

因此,要包含虚拟主机定义,您可以执行以下两件事之一:-

1。 将您的 vhost 定义放入文件 \wamp\bin\apache\apache2.4.4\conf\extra\httpd-vhosts.conf and then in thehttpd.conf 文件中取消注释此行(它靠近 conf 文件的底部。

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

删除Include 行前面的#

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

2。 将您的虚拟主机定义放入 \wamp\vhost 文件夹中的“您喜欢的任何名称”的文件中。

现在httpd.conf 文件底部有一行写着IncludeOptional "d:/wamp/vhosts/*" 这将包括该文件夹中的任何文件,如果它是虚拟主机定义,它将应用于配置。这是 Apache 2.4 的一个新命令,我相信它只适用于 Apache 2.4.x 安装。

【讨论】:

哇.. 那里有很多信息,伙计,不错的一个 :) 我不在家,所以不能尝试你的提示,直到稍后再次感谢 :) 感谢您为回答这个问题所做的努力,非常感谢本网站上像您这样的用户。 记得取消注释包含!!我花了很多时间才弄清楚【参考方案2】:

我按照本指南进行操作,效果很好

我不得不改变路径...

<VirtualHost *:80>
 ServerAdmin emailaddress@domain.com
 DocumentRoot "c:\wamp\www\client1"
 ServerName client1.localhost
 ErrorLog "logs/client1.log"
 CustomLog "logs/client1-access.log" common
</VirtualHost>

除此之外.. 我发现这是使用 WAMP 的虚拟主机的一个很好的快速指南 http://www.techrepublic.com/blog/smb-technologist/create-virtual-hosts-in-a-wamp-server/#

【讨论】:

【参考方案3】:

尝试像这样将您的客户端文件夹放在 C:\wamp\www\ 下 C:\wamp\www\client1 和 C:\wamp\www\client2

编辑

如果还是不行试试这个 使用 client1.dev 而不是 client1.localhost 更改您的主机文件,然后在您的 Virtualhost 设置中放置一个 Servername,如下所示

<VirtualHost *:80>
DocumentRoot "F:\www\client1"
ServerName client1.dev
ServerAlias client1.dev www.client1.dev
Options Indexes FollowSymLinks
<Directory "F:\www\client1">
    AllowOverride All
    Order Deny,Allow
</Directory>
</VirtualHost>

您必须重新启动才能使 hosts 文件中的更改生效

【讨论】:

是的 - 我现在修复了,虽然 WAMP 重启后同样的问题仍然存在 尝试重新启动系统而不是重新启动 我的电脑重启后仍然没有乐趣?我不在家,所以直到今晚晚些时候才能尝试任何东西.. 您是否检查了我的编辑帖子并更改了虚拟主机设置? 今晚晚些时候我会试一试 - 感谢 touch wood,它会起作用 :)【参考方案4】:

首先,出于安全考虑,您的目录结构不应超过www 文件夹。

- c:\wamp\www (home)
    -c:\wamp\www\client1 (client1)
    -c:\wamp\www\client2 (client2)

第二次在虚拟主机中更改需要reload,但在您的情况下,您必须执行restart,因为wamp 不提供reload

【讨论】:

oops - 我将其修复为将 www 放在路径中,但在 apache 重启后仍然存在同样的问题 Virtual Host 没有理由应该位于 \wamp\www 文件夹下方。事实上,如果做得好,最好将虚拟主机站点完全放在该文件夹结构之外。那么您在每个站点上放置的安全性与 wamp 默认安全性完全分开 WAMP 服务器 确实 提供了一个简单的机制来重新加载服务。 Apache 和 mysql 或 Apache 或 MySQL 单独。左键单击 wampmanager 并查看菜单选项。

以上是关于虚拟主机 - 全部重定向到 WAMP 本地主机“主页”页面的主要内容,如果未能解决你的问题,请参考以下文章

虚拟主机被重定向到本地主机

Laravel PHPunit 重定向到本地主机

WAMP 的远程访问重定向到重复的 url

WAMP httpd.config 重定向

laravel 尾部斜杠重定向到本地主机

Apache 2.4 将本地虚拟主机重定向到 https 而不是 http