如何在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
主页上“工具”部分下的链接。
您将看到如下页面:
填写每个字段上方的说明指定的字段
将为您创建虚拟主机配置。
现在,您必须重新启动DNS缓存。您可以从这样的wampmanager菜单中执行此操作right click wampmanager->Tools->Restart DNS
。DNS缓存将重新启动,然后Apache也将停止并重新启动。当wampmanager图标再次变为绿色时,所有操作均完成。
现在,您必须创建一个简单的index.php
文件或将站点安装到上面创建的文件夹中。
假设您的VH被称为,project.dev
您应该在WAMPServer主页的“虚拟主机”部分下看到该名称。
您可以从此菜单启动网站,也可以只使用地址栏中的新域名(域名),project1.dev
然后启动网站。
旧的WAMPServer 2.5机制,或者如果您想手动完成所有操作
WampServer 2.5及更高版本中的概念已发生更改,并且有充分的理由进行此更改!
在WampServer中,现在强烈建议为每个项目创建一个虚拟主机,即使您将它们保存在\wamp\www\subfolder
结构中也是如此。
虚拟主机文档
虚拟主机示例
现在,WampServer主页(\wamp\www\index.php
)希望您已经为所有项目创建了虚拟主机,因此只有在这样做的情况下才能正常工作。
历史
为了使使用WampServer的初学者可以更轻松地学习PHP Apache和MySQL,建议您在该\wamp\www\
文件夹下创建子文件夹。
wamp
|
|
|
|
然后,这些子文件夹将在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
现在,如果我们已经使用“虚拟主机”定义正确定义了该站点并运行它,因为http://project1
WAMPServer开发站点上的结果将与在实时宿主环境中收到的结果匹配。
$_SERVER['HTTP_HOST'] = project1
$_SERVER['SERVER_NAME'] = project1
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www/project1
现在,这种差异乍看之下似乎微不足道,但是如果您使用的是WordPress之类的框架,或者使用诸如Joomla之类的CMS之类的框架,那么当您将站点移至实时服务器时,这确实会造成问题。
如何在WampServer中创建虚拟主机
实际上,这对于任何Windows Apache Wndows服务器都应该基本相同,只是在可以找到Apache配置文件的地方有所不同。
在Apache中创建第一个虚拟主机需要3个步骤,如果已定义一个,则只有2个步骤。
- 创建虚拟主机定义
- 将您的新域名添加到HOSTS文件中。
- 取消注释httpd.conf中包含虚拟主机定义文件的行。
步骤1,创建虚拟主机定义
编辑httpd-hosts.conf
WampServer所在的文件
\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>
注意:将每个虚拟主机DocumentRoot
定义为其自己。您还可以将许多其他参数添加到虚拟主机定义中,请查看Apache文档。
放在一边
虚拟主机在Apache中的工作方式:该文件中的第一个定义也将是默认站点,因此浏览器中使用的域名应该与任何实际定义的虚拟托管域都不匹配,因此将localhost作为文件中的第一个域将使如果黑客尝试仅使用您的IP地址加载的站点。因此,如果我们确保此域的Apache安全性始终设置为
Require local
任何来自外部地址的随意破解都会收到一个错误,并且不会进入您的PC,但是如果您拼写错误的域名,则会显示WampServer主页,因为您与WampServer和thefore是同一台PC local
。
第二步:
将您的新域名添加到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
请注意,您应该在此处为IPV4回送地址127.0.0.1
以及IPV6回送地址定义,::1
因为Apache现在可以识别IPV6,并且浏览器将使用IPV4或IPV6或两者都使用。我不知道它如何决定使用哪个,但是如果您打开了IPV6堆栈,并且可以使用XP SP3的大多数窗口操作系统,它就可以使用。
现在,我们必须告诉窗口刷新其域名缓存,因此再次使用“以管理员身份运行”菜单选项再次启动命令窗口,然后执行以下操作。
net stop dnscache
net start dnscache
这将强制Windows清除其域名缓存并重新加载它,在重新加载时它将重新读取HOSTS文件,因此现在它知道该域了project1
。
步骤3:取消注释httpd.conf中包含虚拟主机定义文件的行。
编辑您的httpd.conf,使用wampmanager.exe菜单来确保您编辑了正确的文件。
在httpd.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”,因此要使链接正常工作,我们必须创建一个虚拟主机定义,以使该链接在您的浏览器中实际启动该站点,而如果没有虚拟主机定义,启动网站搜索作为关键字的站点名称,或者仅返回找不到站点的条件。
“我的虚拟主机”菜单项有所不同。它搜索用于定义虚拟主机的文件(我们将在稍后介绍),并为找到的每个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
现在,您将站点代码复制到或开始在\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>
然后将这个新的开发域添加到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而不是连接到Internet。
还:看到我已允许从VHOST定义中的Internet访问此站点,此更改将仅适用于此站点,而不适用于其他任何站点。对于允许客户在一个小时左右的时间内查看您的更改而不必将其复制到实时服务器中非常有用。这确实意味着我们必须手动编辑此文件才能打开和关闭此访问权限,而不是使用wampmanager上的“联机/脱机”菜单项。
另外,我还对PHP配置进行了一些修改,同样仅适用于该站点。与您维护的所有其他站点不同,在维护具有特定要求的站点时非常有用。我想我们可以根据使用的参数来假设它的某个页面中有一个运行时间较长的页面,并且编写得很差,并且不会在浏览器中显示错误而不会造成页面混乱的情况下运行。相信这样的网站存在,人们仍然希望它们维护得不好。但这意味着我们只需要为此特定站点更改这些参数,而不必全局更改为WampServer上运行的所有虚拟站点。