我用PHP 5.5安装了wamp server 2.5。现在,当我尝试从首页(wamp主页)访问我的项目页面时,它会重定向到错误的网址并显示谷歌无法找到此页面。
问题定义是
我使用http://localhost
我有很多项目。假设我点击了sample_project
然后页面重定向到sample_projects/
Google Chrome会显示错误chrome cannot find this webpage
我的wamp PHP扩展区域中有两个字段是红色标记。它们是php_enchant
和php_opcache
我的wamp有什么问题?我错过了什么吗?请帮忙
答案 0 :(得分:31)
老实说,我认为为每个单一项目创建虚拟主机非常低效。所以经过调查我发现了一个关键变量:
wamp/www/index.php.
快速分析后,变量的明显目的是删除本地主机'在项目链接。
更改此行:
$suppress_localhost = true;
对此:
$suppress_localhost = false;
答案 1 :(得分:9)
WAMPServer 2.5主页您的项目菜单和虚拟主机
WampServer 2.5中的概念发生了变化,这是一个很好的理由!
在WampServer 2.5中,现在强烈建议您为每个项目创建一个虚拟主机,即使您持有\wamp\www\subfolder
结构。
WampServer主页(\ wamp \ www \ index.php)现在希望您为所有项目创建虚拟主机,因此只有在您这样做的情况下才能正常工作。
<强>记录
为了让使用WampServer的初学者更轻松地学习PHP Apache和MySQL,建议您在\wamp\www\
文件夹下创建子文件夹。
wamp
|-- www
|-- Chapter1
|-- Chapter2
|-- etc
然后,这些子文件夹将显示为WampServer主页中名为&#39;您的项目&#39;这些链接将包含指向localhost/subfoldername
的链接。
仅适用于简单教程
这使整个初学者的生活变得轻松,并且完全可以接受,例如以下教程学习PHP编码。 但是,在开发您以后想要复制到实时托管服务器的真实网站时,它从未打算使用。 事实上,如果你确实使用了这种机制,它通常会导致问题,因为实时站点配置与你的开发配置不匹配。
真正网站开发的问题。
原因当然是wamp的默认DocumentRoot设置是
DocumentRoot "c:/wamp/www/"
无论你的子文件夹被调用了什么。 通常使用查询结构的PHP代码或您的站点在开发WampServer上运行时收到的信息与在实时托管服务器上运行时收到的信息不同,其中DocumentRoot配置指向网站顶部的文件夹文件层次结构 这种代码存在于许多框架和CMS中,例如WordPress和Joomla等。
例如
假设我们在wamp\www\project1
中有一个名为project1的项目,并且错误地运行为localhost/project1/index.php
这是一些有问题的PHP命令报告的内容:
$_SERVER['HTTP_HOST'] = localhost
$_SERVER['SERVER_NAME'] = localhost
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www
现在,如果我们使用虚拟主机定义正确定义了该站点并将其作为http://project1
运行,则WAMPServer开发站点上的结果将与在实时托管环境中收到的结果相匹配。
$_SERVER['HTTP_HOST'] = project1
$_SERVER['SERVER_NAME'] = project1
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www/project1
现在这种差异可能看起来微不足道,但是如果您使用像WordPress这样的框架或其中一个像Joomla这样的CMS,那么当您将网站移动到实时服务器时,这会导致问题
实际上,对于任何wndows Apache服务器,这应该基本相同,只是在你可能找到Apache配置文件的地方有所不同。
在Apache中创建第一个虚拟主机有3个步骤,如果已经定义了一个,则只有2个步骤。
第1步,创建虚拟主机定义
编辑名为httpd-hosts.conf
的文件,WampServer位于
\wamp\bin\apache\apache2.4.9\conf\extra\httpd-hosts.conf
(Apache版本号可能不同,在继续之前吸引大脑)
如果这是您第一次编辑此文件,请删除默认示例代码,这是没用的。
我假设我们要为名为project1的网站创建一个定义,该网站位于
中\wamp\www\project1
非常重要,首先我们必须确保localhost仍然有效,这是我们将放入此文件的第一个VHOST定义。
<VirtualHost *:80>
DocumentRoot "c:/wamp/www"
ServerName localhost
ServerAlias localhost
<Directory "c:/wamp/www">
AllowOverride All
Require local
</Directory>
</VirtualHost>
现在我们定义我们的项目:当然,当你开始一个项目时,你会为每个项目做这个。
<VirtualHost *:80>
DocumentRoot "c:/wamp/www/project1"
ServerName project1
<Directory "c:/wamp/www/project1">
AllowOverride All
Require local
</Directory>
</VirtualHost>
注意:将每个虚拟主机定义为自己的DocumentRoot
。您还可以向虚拟主机定义添加许多其他参数,请查看Apache文档。
小旁白
虚拟主机在Apache中的工作方式:此文件中的第一个定义也将是默认站点,因此浏览器中使用的域名与实际定义的虚拟托管域不匹配,使localhost成为文件中的第一个域因此,如果黑客企图只使用您的IP地址,将使其成为加载的站点。 因此,如果我们确保此域的Apache安全性始终设置为
Require local
来自外部地址的任何随意黑客都会收到错误而不会进入您的PC,但是如果您拼错了域名,您将会看到WampServer主页,因为您与WampServer位于同一台PC上,因此{{1} }。
Setp 2 :
将新域名添加到HOSTS文件中。 现在我们需要将我们在虚拟主机定义中使用的域名添加到HOSTS文件中,以便Windows知道在哪里找到它。这与创建DNS A记录类似,但仅在此特定PC上可见。
修改local
该文件没有扩展名,应该保持这种状态。请注意记事本,因为如果您没有更好的编辑器,它可能会尝试添加C:\windows\system32\drivers\etc\hosts
扩展名。
我建议你下载Notepad ++,它是免费的,非常好的编辑器。
此外,这是受保护的文件,因此您必须使用管理员权限对其进行编辑,因此请使用Run as Administrator菜单选项启动编辑器。
完成这些编辑后,hosts文件应如下所示
.txt
请注意,此处应该有IPV4环回地址127.0.0.1 localhost
127.0.0.1 project1
::1 localhost
::1 project1
以及IPV6环回地址127.0.0.1
的定义,因为Apache现在可以识别IPV6,浏览器将使用IPV4或IPV6或两者。我不知道它如何决定使用哪个,但如果你打开了IPV6堆栈,它可以使用,而且大多数窗口操作系统都是从XP SP3开始的。
现在我们必须告诉windows刷新其域名缓存,因此再次使用Run as Administrator菜单选项再次启动命令窗口,并执行以下操作。
::1
这会强制窗口清除其域名缓存并重新加载,在重新加载时会重新读取HOSTS文件,所以它现在知道域net stop dnscache
net start dnscache
。
第3步:取消注释httpd.conf中包含虚拟主机定义文件的行。
编辑httpd.conf,使用wampmanager.exe菜单确保编辑正确的文件。
在httpd.conf中找到这一行
project1
然后删除# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
以取消注释该行。
要在运行Apache时激活此更改,我们现在必须停止并重新启动Apache服务。
#
现在,如果系统托盘中的WAMP图标没有再次变为绿色,则表示您在wampmanager.exe -> Apache -> Service -> Restart Service
文件中可能出错了。
如果是这样,这是一个有用的机制来找出问题所在。它使用Apache exe(httpd.exe)的一项功能来检查其配置文件,并按文件名和行号报告错误。
启动命令窗口。
\wamp\bin\apache\apache2.4.9\conf\extra\httpd-hosts.conf
因此,修复错误并重新测试,直到获得输出
cd \wamp\bin\apache\apache2.4.9\bin
httpd -t
现在还有一件事。
wampmanager菜单系统实际上有2个新菜单项。一个名为[b]&#39;我的项目&#39; [/ b],默认情况下已开启。 第二个叫做[b]&#39;我的虚拟主机&#39; [/ b],默认情况下不会激活。
&#39;我的项目&#39;将列出\ wamp \ www目录的任何子目录,并提供在该子目录中启动站点的链接。 正如我之前所说的那样,它启动了“project1”而不是“localhost / project1&#39;因此,为了使链接工作,我们必须创建一个虚拟主机定义,以使此链接实际在您的浏览器中启动该站点,而没有虚拟主机定义,它可能会启动网站搜索作为关键字的网站名称或只是返回未找到的网站。
我的虚拟主机&#39;菜单项有点不同。它搜索用于定义虚拟主机的文件(我们将在一分钟内完成)并为它找到的每个ServerName参数创建菜单链接,并为每个创建一个菜单项。 这可能看起来有点混乱,因为一旦我们为\ wamp \ www文件夹的子目录创建虚拟主机定义,一些项目将出现在两个“我的项目”中。菜单和“我的虚拟主机”&#39;菜单&#39; S
如何关闭此其他“我的虚拟主机”#39;菜单上?
Syntax OK
。部分。;WAMPPROJECTSUBMENU
参数之前或之后添加此新参数;WAMPVHOSTSUBMENU
。大笔记 只有在您已经定义了一些虚拟主机的情况下才会出现新菜单!否则,在定义VHOST之前,您将看不到任何区别。
答案 2 :(得分:0)
我无法相信Wampserver现在希望每个人都能在笔记本电脑上为每个正在开发的项目创建一个虚拟主机吗? 您的说明似乎非常好,但对于初学者来说可能太复杂了(另外,我怀疑第2步的说明中的文件路径:将新域添加到HOSTS文件仅适用于32位Windows)?
上面的Rogue解决方案(更改$ suppress_localhost =“true”;更改为$ suppress_localhost =“false”;在c:/wamp/www/index.php中)将完美适用于99%以上的用户他们的笔记本电脑上有一个网站
将完整的网站上传到在线服务器不应该导致任何实际问题。 或许,Wampserver还有另一个原因可以添加$ suppress_localhost代码吗?