项目链接在Wamp服务器上不起作用

use*_*431 78 php mysql apache wamp wampserver

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

当我将鼠标悬停在链接上方时,目录始终显示为"http:// ProjectFolderNameHere /".什么时候它应该是"http:// LocalHost:8080/ProjectFolderNameHere /".我该怎么做才能使链接正常工作?

我的机器运行在Windows 7 Home Edition 64位上,我已经禁用了Microsoft的IIS.

Rig*_*lly 150

如何在WampServer中创建虚拟主机


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

您可以使用作为WAMPServer一部分提供的实用程序来执行几乎所有操作.

  • 在里面创建一个包含project.site的文件夹.这可以在C:\wamp\www\目录下或完全单独的文件夹中C:\websites.

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

  • 现在打开localhost wampmanager->localhost并单击Add a Virtual Host主页上TOOLS部分下的链接.

您将看到如下页面:

在此输入图像描述

  • 按照每个字段上方的说明填写字段

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

  • 现在您必须重新启动DNS缓存.你可以从像这样的wampmanager菜单中做到这一点right click wampmanager->Tools->Restart DNS.DNS缓存将重新启动,然后Apache也将停止并重新启动.当wampmanager图标再次变为绿色时,一切都完成了.

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

  • 假设您的VH已被调用project.dev您应该在WAMPServer主页的Your Virtual Hosts部分下看到该名称.

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


旧的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
Run Code Online (Sandbox Code Playgroud)

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

仅适用于简单教程

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

真正的网站开发的问题.

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

DocumentRoot "c:/wamp/www/"

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

例如

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

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

$_SERVER['HTTP_HOST'] = localhost
$_SERVER['SERVER_NAME'] = localhost
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www
Run Code Online (Sandbox Code Playgroud)

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

$_SERVER['HTTP_HOST'] = project1
$_SERVER['SERVER_NAME'] = project1
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www/project1
Run Code Online (Sandbox Code Playgroud)

现在这种差异看起来似乎微不足道,但是如果您使用像WordPress这样的框架或者像Joomla这样的CMS之一,那么当您将站点移动到实时服务器时,这会导致问题.

如何在WampServer中创建虚拟主机

实际上,对于任何wndows Apache服务器,这应该基本相同,只是在你可能找到Apache配置文件的地方有所不同.

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

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

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

编辑httpd-hosts.confWampServer所在的文件

\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.conf
Run Code Online (Sandbox Code Playgroud)

(Apache版本号可能不同,在继续之前搞大脑)

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

我假设我们想要为一个名为project1的网站创建一个定义

\wamp\www\project1
Run Code Online (Sandbox Code Playgroud)

非常重要,首先我们必须确保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>
Run Code Online (Sandbox Code Playgroud)

现在我们定义我们的项目:当然,当你开始一个新项目时,你会为每个项目做这个.

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/project1"
    ServerName project1
    <Directory  "c:/wamp/www/project1">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

小一点

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

Require local
Run Code Online (Sandbox Code Playgroud)

来自外部地址的任何随意破解都会收到错误而不会进入您的PC,但是如果您错过了一个域,您将会看到WampServer主页,因为您与WampServer在同一台PC上local.

第2步:

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

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

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

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

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

127.0.0.1 localhost
127.0.0.1 project1

::1 localhost
::1 project1
Run Code Online (Sandbox Code Playgroud)

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

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

net stop dnscache
net start dnscache
Run Code Online (Sandbox Code Playgroud)

这会强制窗口清除其域名缓存并重新加载它,在重新加载时它会重新读取HOSTS文件,所以现在它知道域名project1.

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

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

在httpd.conf中找到这一行

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
Run Code Online (Sandbox Code Playgroud)

然后删除#以取消注释该行.

要在运行Apache时激活此更改,我们现在必须停止并重新启动Apache服务.

wampmanager.exe -> Apache -> Service -> Restart Service
Run Code Online (Sandbox Code Playgroud)

现在,如果系统托盘中的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
Run Code Online (Sandbox Code Playgroud)

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

Syntax OK
Run Code Online (Sandbox Code Playgroud)

现在还有一件事.

wampmanager菜单系统上实际上有2个新菜单项.一个名为"我的项目"的人默认打开.第二个称为"我的虚拟主机",默认情况下不会激活.

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

"我的虚拟主机"菜单项略有不同.它搜索用于定义虚拟主机的文件(我们将在一分钟内完成)并为它找到的每个ServerName参数创建菜单链接,并为每个创建一个菜单项.这可能看起来有点混乱,因为一旦我们为\ wamp\www文件夹的子目录创建虚拟主机定义,一些项目将出现在"我的项目"菜单和"我的虚拟主机"菜单上.

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

  • 备份\ wamp\wampmanager.tpl文件,以防万一你弄错了,这是一个非常重要的文件.
  • 编辑\ wamp\wampmanager.tpl
  • ;WAMPPROJECTSUBMENU在'[Menu.Left]'部分中找到此参数.
  • ;WAMPVHOSTSUBMENU在参数之前或之后添加此新;WAMPPROJECTSUBMENU参数.
  • 保存文件.
  • 现在右键单击wampmanager图标,然后选择"刷新".如果这不添加菜单,则"退出"并重新启动wampmanager.

大注意 只有在您已经定义了一些虚拟主机的情况下才会出现新菜单!否则,在定义VHOST之前,您将看不到任何差异.

现在,如果你把它带到它的逻辑扩展

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

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

D:
MD websites
CD websites
MD example.com
CD example.com
MD www
Run Code Online (Sandbox Code Playgroud)

您现在将站点代码复制到,或者开始在\websites\example.com\www文件夹中创建它,并像这样定义您的VHOST:

<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>
Run Code Online (Sandbox Code Playgroud)

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

127.0.0.1 localhost
::1 localhost

127.0.0.1 project1
::1 project1

127.0.0.1 example.dev
::1 example.dev
Run Code Online (Sandbox Code Playgroud)

注意:使用与您的实时域名相同的ServerName或ServerAlias并不是一个好主意,就像我们使用example.com作为ServerName一样,这意味着我们无法再从此获取真实的实际站点PC因为它将example.com引导至127.0.0.1即这台PC而不是上网.

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

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

  • @ starleaf1你希望是我们的命令!在WAMPServer 3上运行`localhost/add_vhost.php`,查看[WAMPServers论坛上的这篇文章](http://forum.wampserver.com/read.php?2,138295,138295#msg-138295) (2认同)

Hus*_*ain 74

我相信这是最好的解决方案:

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

改变第30行:$suppress_localhost = true;

$suppress_localhost = false;

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

  • 是的,为每个站点创建一个虚拟主机,请参阅上面的答案以了解具体方法. (3认同)

Aru*_*unu 24

index.phpwww文件夹中打开并设置

$suppress_localhost = false;
Run Code Online (Sandbox Code Playgroud)

这将http://localhost/在您的项目链接之前


Rak*_*esh 10

要从主页访问项目,您需要先创建一个虚拟主机.

最简单的方法是使用Wamp的添加虚拟主机实用程序.

只需按以下步骤操作:

  1. "C:\ wamp\www \"目录中创建一个文件夹,并为其指定一个名称,例如,您要为您的站点提供的名称.' '.所以路径将是"C:\ wamp\www\mysite".
  2. 现在在浏览器中打开localhost的主页,在" 工具"菜单下单击" 添加虚拟主机"链接.
  3. 输入虚拟主机的名称,该名称必须是我们在www目录中创建的文件夹的名称,即' mysite '.
  4. 输入虚拟主机的绝对路径,即"C:\ wamp\www\mysite \",不带引号,然后单击下面的"开始创建VirtualHost"按钮.
  5. 创建虚拟主机,现在您只需要'重新启动DNS'.要执行此操作,请右键单击wamp服务器的托盘菜单图标,单击工具>重新启动DNS,然后让托盘菜单图标再次变为绿色.
  6. 搞定!现在只需在"C:\ wamp\www\mysite \"目录中创建"index.php"页面.在'index.php'文件中添加一些代码,比如
    <?php echo "<h1>Hello World</h1>"; ?>

现在,您可以从localhost的主页访问项目.只需点击项目链接,您就会在屏幕上看到"Hello World".

  • 这应该是截至2017年4月18日当前接受的答案.为我工作完美. (2认同)