WAMP 虚拟主机不工作

Posted

技术标签:

【中文标题】WAMP 虚拟主机不工作【英文标题】:WAMP Virtual Host not working 【发布时间】:2014-11-24 15:13:44 【问题描述】:

我使用的是 wamp 2.5 版 我的 Apache 是 2.4.9 php: 5.5.12 mysql:5.6.17

我有这些配置:

在我的httpd.conf

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

在我的G:\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhost.conf

# Virtual Hosts
#
# Required modules: mod_log_config

# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#


#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#


<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "g:/Apache24/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "g:/Apache24/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error.log"
    CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>


<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "g:/wamp/www"
    ServerName localhost
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "g:\wamp\www\mysite\public"
    ServerName mysite.dev
</VirtualHost>

在我的c:\Windows\System32\Drivers\etc\hosts

# localhost name resolution is handled within DNS itself.
127.0.0.1   localhost
127.0.0.1   mysite.dev
#   ::1     localhost

我尝试使用以下 URL 访问我的项目:http://www.mysite.dev/ 但是我得到一个 Server not found error 我尝试使用 www.mysite.dev 访问它,http://mysite.dev 但仍然运气不好!

我的虚拟主机以前可以工作,但我不确定为什么它现在不能工作。发生了一些奇怪的事情。

我不确定发生了什么。任何想法将不胜感激!

谢谢!

【问题讨论】:

你试过类似this吗? 在 url 中只使用 mysite.dev。并检查 同时检查你的 mysite\public 是否有 index.php? @RoshanDandgavhal 是的 index.php 在那里。 @Darren 我会试试那个。 【参考方案1】:

首先,您需要从 vhost-httpd.conf 文件中删除示例 dummy 定义。它们作为示例只是为了让您开始使用语法,并且不应保留在活动的conf/extra/httpd-vhosts.conf 中,因为它们指向不存在的文件夹。

所以从文件中删除这两个定义:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "g:/Apache24/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "g:/Apache24/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error.log"
    CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>

第二个 Apache 2.4.x 支持 IPV4 (127.0.0.1) 和 IPV6 (::1),因此您的 hosts 文件应如下所示,其中包含每个站点的 IPV4 和 IPV6 版本的定义。浏览器可以任意使用其中任何一个,因此您需要两者,但如果两者都在您的 PC 上实际处于活动状态,则可能会优先使用 IPV6 网络而不是 IPV4。

127.0.0.1   localhost
::1  localhost

127.0.0.1   mysite.dev
::1  mysite.dev

现在在您系统上实际存在的 2 个虚拟主机上尝试将其作为虚拟主机定义:

<VirtualHost *:80>
    DocumentRoot "g:/wamp/www"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" common
    <Directory  "G:/wamp/www">
        AllowOverride All
        Options Indexes FollowSymLinks
        Require local
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "g:\wamp\www\mysite\public"
    ServerName mysite.dev
    ServerAlias www.mysite.dev
    ErrorLog "logs/mysite-error.log"
    CustomLog "logs/mysite-access.log" common
    <Directory  "G:/wamp/www/mysite/public">
        AllowOverride All
        Options Indexes FollowSymLinks
        Require local
    </Directory>
</VirtualHost>

&lt;VirtualHost&gt;....&lt;/VirtualHost&gt; 部分中的 &lt;Directory&gt;....&lt;/Directory&gt; 部分告诉 Apache 它允许从哪些 IP 地址接受连接,因此使用 Apache 2.4 语法 Require local 限制访问,以便只有运行 WAMPServer 的 PC 即 Apache 可以连接到这些网站中的任何一个。

避免在同一个定义中混合使用 Apache 2.2 语法和 Apache 2.4 语法。所以不要使用

Order Allow,Deny
Allow from all

Require all granted

在相同的定义中。您使用的是 Apache 2.4,因此请使用 Apache 2.4 语法。

如果您希望允许本地网络内的其他 PC 看到您的站点,即工作伙伴或孩子等,您可以将此语法添加到您的一个或多个虚拟主机定义中。

只允许一台其他 PC 进入您的站点

Require local
Require ip 192.168.1.100

或其他 2 台电脑

Require local
Require ip 192.168.1.100, 192.168.1.101

或者对于您本地网络上的任何人,只需使用 IP 地址的 4 个四分位数中的前 3 个。

Require ip 192.168.1

同时避免使用允许从任何地方访问的语法,即

Require all granted  <--Apache 2.4 syntax

or 

Order Allow,Deny     <-- Apache 2.2 syntax
Allow from all    

它可能会在短期内解决您的问题,但在您决定要向朋友/客户/老板展示您的网站时,它会等待您稍后的某个时间。如果您进入路由器端口转发阶段,以便允许世界进入您的网络,这将导致 您的所有站点 可供世界使用。

最好将您希望人们看到以进行测试/吹嘘的 ONE 站点的 ONE 虚拟主机定义从 Require local 更改为 Require all granted,并且只允许从 Internet 访问该单个站点。

完成所有这些更改后,请记住重新启动 Apache。

此外,如果您更改 hosts 文件以使 chnages 处于活动状态,您应该重新启动或从使用 Runs as Administrator 选项启动的命令窗口的命令行运行这些命令。

net stop dnscache
net start dnscache

如果您使用的是 Windows 10,上述 dns 命令不再起作用,您应该改为这样做。

ipconfig /flushdns

【讨论】:

天哪,我不确定哪一个真的有效。 ::1 和版本的语法差异,因为我做了两个更改(IP6 感知主机文件和更正 2.4 配置语法)。几周以来我一直在苦苦挣扎(最终我没有使用虚拟主机,而是在需要时切换站点)。非常感谢 非常感谢,在我的主机文件中添加 ::1 解决了问题!【参考方案2】:

由于 Google 收购了 .dev gTLD,拥有 .dev 开发站点不再容易,最好的缓解方法是将您的开发域重命名为 .local 或您喜欢的名称。

在后台发生的情况是本地 DNS 服务器将浏览器重定向到 127.0.53.53(打开 cmd > nslookup yourdomain.dev),以便通知最终用户正在获取 .dev gTLD。由于 hosts 文件中的 .dev 域设置为 127.0.0.1 它显示连接被拒绝。

您可以在hosts文件中将127.0.0.1更改为127.0.53.53,可以看到浏览器错误从ERR_CONNECTION_REFUSED更改为ERR_ICANN_NAME_COLLISION。

【讨论】:

【参考方案3】:

以下对我有用

<VirtualHost *:80>
    DocumentRoot "G:\project\test.dev"
    ServerAdmin test@gmail.com
    ServerName test.dev
    ErrorLog "logs/test.dev-error.log"
    CustomLog "logs/test.dev-access.log" common
    <Directory "G:\project\test.dev">
       AllowOverride All
       Options Indexes FollowSymLinks
       Require local
    </Directory>
</VirtualHost>

【讨论】:

【参考方案4】:

我通过取消注释 Apache 文件夹中 httpd.conf 中的某些行来解决同样的问题。

取消注释下面的行:

Include conf/extra/httpd-vhosts.conf
LoadModule vhost_alias_module modules/mod_vhost_alias.so

保存文件并重新启动您的 Apache,它将工作。 非常感谢这个人: https://john-dugan.com/wamp-vhost-setup/

【讨论】:

【参考方案5】:

这个问题我来得太晚了,我做了@RiggsFolly 提到的所有事情,但我改变的一件事使它立即工作。我将.dev 更改为.test,因为.dev 是保留的。希望这会有所帮助

【讨论】:

@Jonjie 很高兴,我很久以前就离开了 web dev,但我仍然有用 =D 哈哈不错。无论如何,你知道 .dev 保留的原因和位置吗?【参考方案6】:

查看 httpd.conf 中未注释的这些模块

proxy_module proxy_http_module

【讨论】:

【参考方案7】:

在你的 apache httpd.config 文件上试试这个:

    <VirtualHost *:80>
      ServerName mysite.dev
      DocumentRoot "g:\wamp\www\mysite\public"
     SetEnv APPLICATION_ENV "development"

     <Directory "g:\wamp\www\mysite\public">
        DirectoryIndex index.php
        Options All Includes Indexes
        Options All Indexes FollowSymLinks 
        Order allow,deny
        Allow from all
        Require all granted
     </Directory>
  </VirtualHost>

重新启动您的 wamp 服务器并将诸如 mysite.dev/ 之类的 URL 放在您的浏览器上。 希望它会帮助你。 谢谢。

【讨论】:

以上是关于WAMP 虚拟主机不工作的主要内容,如果未能解决你的问题,请参考以下文章

WAMP 服务器,本地主机不工作

限制对 Apache 2.4 虚拟主机 (WAMP) 的访问

Wamp:Phpmyadmin 显示空白页面,本地主机页面正在工作 [关闭]

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

Wamp 虚拟主机设置

WAMP 服务器不加载本地主机