项目链接在 Wamp 服务器上不起作用如何在 WampServer 中创建虚拟主机

2022-08-30 07:44:42

我正在另一台计算机上安装 Wamp 服务器以运行中型数据库和 UI。我已经成功地阻止了IIS并将服务器路由到Localhost:8080。但是,每当我尝试从localhost主页访问我的项目时,在www文件中;我被重定向到“找不到主页”错误。

当我将鼠标悬停在链接上方时,目录总是会出现“http:// ProjectFolderNameHere /”。当它应该是“http:// LocalHost:8080 / ProjectFolderNameHere /”我该怎么做才能使链接正常工作?

My Machine 在 Windows 7 Home Edition 64 位上运行,并且我已经禁用了 Microsoft 的 IIS。


答案 1

如何在 WampServer 中创建虚拟主机


WAMPServer 3使这个过程变得更加容易!

您几乎可以从作为WAMPServer的一部分提供的实用程序中执行所有操作。

  • 在其中创建一个文件夹以包含 project.site。这可以位于目录下,也可以位于完全独立的文件夹中,如 .C:\wamp\www\C:\websites

  • 在您选择的位置EG内或下创建一个文件夹C:\websites\project1\wwwc:\wamp\www\project1\www

  • 现在打开本地主机,然后单击主页上“工具”部分下的链接。wampmanager->localhostAdd a Virtual Host

您将看到一个如下页面:

enter image description here

  • 填写每个字段上方的说明指定的字段

  • 将为您创建虚拟主机配置。

  • 现在,您必须重新启动 DNS 缓存。您可以从 wampmanager 菜单中执行此操作,如下所示。DNS缓存将重新启动,然后Apache也将停止并重新启动。当 wampmanager 图标再次变为绿色时,一切完成。right click wampmanager->Tools->Restart DNS

  • 现在,您必须创建一个简单的文件或将站点安装到上面创建的文件夹中。index.php

  • 假设您的 VH 被调用,您应该在 WAMPServer 主页的“您的虚拟主机”部分下看到该名称。project.dev

  • 您可以从此菜单启动站点,或者只需在地址栏 EG 中使用新域名,站点应该启动。project1.dev


旧的WAMPServer 2.5机制,或者如果你想手动完成所有操作

WampServer 2.5 及更高版本的概念发生了变化,这种变化是有充分理由的!

在WampServer中,现在强烈建议您为每个项目创建一个虚拟主机,即使您将它们保存在结构中。\wamp\www\subfolder

虚拟主机文档

虚拟主机示例

WampServer 主页 ( ) 现在希望您已经为所有项目创建了一个虚拟主机,因此只有当您这样做时才能正常工作。\wamp\www\index.php

历史

为了让使用WampServer学习PHP Apache和MySQL的初学者的生活更轻松,建议您在文件夹下创建子文件夹。\wamp\www\

wamp
  |-- www
       |-- Chapter1
       |-- Chapter2
       |-- etc

然后,这些子文件夹将在 WampServer 主页中名为“您的项目”的菜单下显示为链接,并且这些链接将包含指向 的链接。localhost/subfoldername

仅适用于简单的教程

这使得完全初学者的生活变得容易,并且完全可以接受,例如对于那些遵循教程学习PHP编码的人来说。但是,它从未打算在开发您以后想要复制到实时托管服务器的真实网站时使用。实际上,如果您确实使用此机制,则通常会导致问题,因为实时站点配置与您的开发配置不匹配。

实际网站开发的问题

这样做的原因当然是 wamp 的默认 DocumentRoot 设置为

DocumentRoot "c:/wamp/www/"

无论子文件夹的名称如何。这种经常使用PHP代码来查询结构或站点在开发WampServer上运行时收到的信息与在实时托管服务器上运行时收到的信息不同,其中DocumentRoot配置指向网站文件层次结构顶部的文件夹。这种代码存在于许多框架和CMS中,例如WordPress和Joomla等。

例如

假设我们有一个名为 project1 的项目,但运行不正确,因为wamp\www\project1localhost/project1/index.php

这是一些有问题的PHP命令所报告的内容:

$_SERVER['HTTP_HOST'] = localhost
$_SERVER['SERVER_NAME'] = localhost
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www

现在,如果我们使用虚拟主机定义正确定义了该站点并运行它,因为 WAMPServer 开发站点上的结果将与在实时托管环境中收到的结果相匹配。http://project1

$_SERVER['HTTP_HOST'] = project1
$_SERVER['SERVER_NAME'] = project1
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www/project1

现在,这种差异乍一看似乎微不足道,但是如果您要使用像WordPress这样的框架或像Joomla这样的CMS之一,当您将网站移动到实时服务器时,这可能会并且确实会导致问题。

如何在 WampServer 中创建虚拟主机

实际上,对于任何wndows Apache服务器,这应该基本相同,区别仅在于您可以找到Apache配置文件的位置。

在 Apache 中创建第一个虚拟主机有 3 个步骤,如果已定义了一个虚拟主机,则只需 2 个步骤。

  1. 创建虚拟主机定义
  2. 将您的新域名添加到 HOSTS 文件中。
  3. 取消注释 httpd.conf 中包含虚拟主机定义文件的行。

步骤 1,创建虚拟主机定义

编辑 WampServer 所在的文件httpd-hosts.conf

\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.conf

(Apache版本号可能不同,在继续之前先动脑筋)

如果这是您第一次编辑此文件,请删除默认的示例代码,这是没有用的。

我假设我们想要为一个名为 project1 的网站创建一个定义,该站点位于

\wamp\www\project1

非常重要,首先,我们必须确保localhost仍然有效,以便这是我们将放在此文件中的第一个VHOST定义。

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www"
    ServerName localhost
    ServerAlias localhost
    <Directory  "c:/wamp/www">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

现在我们定义了我们的项目:当然,当您开始一个新项目时,您会为每个项目执行此操作。

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/project1"
    ServerName project1
    <Directory  "c:/wamp/www/project1">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

注意:每个虚拟主机都作为自己的定义。您还可以将许多其他参数添加到虚拟主机定义中,请查看Apache文档。DocumentRoot

小边

虚拟主机在Apache中的工作方式:此文件中的第一个定义也将是默认站点,因此,如果浏览器中使用的域名与任何实际定义的虚拟托管域不匹配,则使localhost成为文件中的第一个域,因此,如果黑客尝试仅使用您的IP地址,则会使其成为加载的站点。因此,如果我们确保此域的Apache安全性始终设置为

Require local

来自外部地址的任何随意黑客都会收到错误,并且不会进入您的PC,但是如果您拼错了域,您将看到WampServer主页,因为您与WampServer和因此在同一台PC上。local

第 2 步

将您的新域名添加到 HOSTS 文件中。现在,我们需要将虚拟主机定义中使用的域名添加到 HOSTS 文件中,以便 Windows 知道在哪里可以找到它。这类似于创建 DNS A 记录,但仅在这种情况下在此特定电脑上可见。

编辑C:\windows\system32\drivers\etc\hosts

该文件没有扩展名,应保持这种状态。注意记事本,因为如果没有更好的编辑器,它可能会尝试添加扩展名。我建议你下载Notepad ++,它是免费的,是一个非常好的编辑器。.txt

此外,这是一个受保护的文件,因此您必须使用管理员权限对其进行编辑,因此请使用“以管理员身份运行”菜单选项启动编辑器。

完成这些编辑后,hosts 文件应如下所示

127.0.0.1 localhost
127.0.0.1 project1

::1 localhost
::1 project1

请注意,您应该在此处为 IPV4 环回地址和 IPV6 环回地址定义,因为 Apache 现在可识别 IPV6,并且浏览器将使用 IPV4 或 IPV6 或两者。我不知道它如何决定使用哪个,但是如果您打开了IPV6堆栈,它可以使用其中任何一个,并且大多数窗口操作系统在XP SP3之前都可以使用。127.0.0.1::1

现在,我们必须告诉Windows刷新其域名缓存,因此再次使用“以管理员身份运行”菜单选项再次启动命令窗口,然后执行以下操作。

net stop dnscache
net start dnscache

这迫使Windows清除其域名缓存并重新加载它,在重新加载时,它将重新读取HOSTS文件,因此现在它知道了 域 。project1

步骤 3:取消注释 httpd.conf 中包含虚拟主机定义文件的行。

编辑您的 httpd.conf,使用 wampmanager.exe菜单来确保编辑正确的文件。

在 httpd.conf 中找到此行

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

只需删除取消注释该行即可。#

要在运行 Apache 的应用程序中激活此更改,我们现在必须停止并重新启动 Apache 服务。

wampmanager.exe -> Apache -> Service -> Restart Service

现在,如果系统托盘中的WAMP图标不再变为绿色,则表示您可能在文件中做错了什么。\wamp\bin\apache\apache2.4.9\conf\extra\httpd-hosts.conf

如果是这样,这里有一个有用的机制来找出问题所在。它使用Apache exe(httpd.exe)的功能来检查其配置文件,并通过文件名和行号报告错误。

启动命令窗口。

cd \wamp\bin\apache\apache2.4.9\bin
httpd -t

因此,修复错误并再次重新测试,直到获得输出

Syntax OK

现在还有一件事。

实际上,wampmanager 菜单系统上有 2 个新菜单项。一个名为“我的项目”,默认情况下处于打开状态。第二个,称为“我的虚拟主机”,默认情况下未激活。

“我的项目”将列出 \wamp\www 目录的任何子目录,并提供在该子目录中启动站点的链接。正如我之前所说,它启动的是“project1”而不是“localhost/project1”,因此要使链接正常工作,我们必须创建一个虚拟主机定义,以使此链接在您的浏览器中实际启动该站点,如果没有虚拟主机定义,它可能会启动站点名称作为关键字的Web搜索,或者只是返回一个找不到站点的条件。

“我的虚拟主机”菜单项略有不同。它搜索用于定义虚拟主机的文件(我们将在一分钟内到达),并为它找到的每个ServerName参数创建菜单链接,并为每个参数创建一个菜单项。这似乎有点令人困惑,因为一旦我们为 \wamp\www 文件夹的子目录创建了虚拟主机定义,一些项目将同时出现在“我的项目”菜单和“我的虚拟主机”菜单上。

如何打开其他“我的虚拟主机”菜单?

  • 备份 \wamp\wampmanager.tpl 文件,以防万一您犯了错误,这是一个非常重要的文件。
  • Edit the \wamp\wampmanager.tpl
  • 找到此参数,它在“[菜单.左]”部分。;WAMPPROJECTSUBMENU
  • 在参数之前或之后添加此新参数。;WAMPVHOSTSUBMENU;WAMPPROJECTSUBMENU
  • 保存文件。
  • 现在右键单击wampmanager图标,然后选择“刷新”。如果这没有添加菜单,请“退出”并重新启动wampmanager。

大音符仅当您已经定义了一些虚拟主机时,才会显示新菜单!否则,在定义VHOST之前,您将看不到任何差异。

现在,如果您将其带到其逻辑扩展

现在,只需更改 VHOST 定义中的 DocumentRoot 参数,即可将网站代码完全移动到文件夹结构之外。例如,你可以这样做:\wamp\

在万普磁盘或任何其他磁盘上创建一个文件夹(当心网络驱动器,它们有点复杂)

D:
MD websites
CD websites
MD example.com
CD example.com
MD www

现在,您可以将站点代码复制到,或开始在文件夹中创建它,并按如下方式定义 VHOST:\websites\example.com\www

<VirtualHost *:80>
    DocumentRoot "d:/websites/example.com/www"
    ServerName example.dev
    ServerAlias www.example.dev
    <Directory  "d:/websites/example.com/www">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    php_flag display_errors Off
    php_flag log_errors On

    php_value max_upload_size 40M
    php_value max_execution_time 60
    php_value error_log "d:/wamp/logs/example_com_phperror.log"
</VirtualHost>

然后将此新开发域添加到 HOSTS 文件:

127.0.0.1 localhost
::1 localhost

127.0.0.1 project1
::1 project1

127.0.0.1 example.dev
::1 example.dev

注意:使用与您的实时域名相同的ServerName或ServerAlias不是一个好主意,就好像我们使用 example.com 作为ServerName一样,这意味着我们无法再从这台PC访问真正的实时站点,因为它会将 example.com 定向到127.0.0.1即这台PC而不是互联网。

另外:请参阅我已允许从VHOST定义中从互联网访问此站点,此更改仅适用于此站点,而不适用于其他站点。对于允许客户端查看您的更改一个小时左右非常有用,而无需将它们复制到实时服务器。这确实意味着我们必须手动编辑此文件以打开和关闭此访问权限,而不是使用wampmanager上的“放在线/离线”菜单项。

此外,我还对PHP配置进行了一些修改,这同样仅适用于此站点。在维护具有特定要求的网站时非常有用,这与维护的所有其他网站不同。我想我们可以从使用的参数中假设它在某个地方有一个长时间运行的页面,并且它写得非常糟糕,并且不会在浏览器上显示错误的情况下运行,而不会使页面变得可怕混乱。相信我这样的网站存在,人们仍然希望它们维护得很糟糕。但这意味着我们只需要更改此特定站点的这些参数,而不必全局更改为在 WampServer 上运行的所有虚拟站点。


答案 2

我认为这是最好的解决方案:

在 www 文件夹中打开索引.php并设置

更改第 30 行:$suppress_localhost = true;

$suppress_localhost = false;

这将确保项目以本地主机 IP/名称为前缀


推荐