Raf*_*tro 10 php apache url wamp localhost
我在WAMP中的项目的URL并没有像我期望的那样解决.例如,我希望文件夹c:\ wamp\www\project1中的项目具有URL http:// project1 /,但它实际上具有URL http:// localhost/project1 /.
访问服务器变量时,这可能会导致问题.我该如何解决?
Rig*_*lly 33
如果您现在正在使用WAMPServer 3或更高版本,您还可以查看此答案,以获得简单的clikc并开始创建虚拟主机.
实际上,这个改变是WAMPServer开发人员想要的,并且有充分的理由.
使用localhost/project1
url和默认的WAMPServer DocumentRoot时出现问题,因为它会导致某些框架和WordPress类型环境出现问题,如果您使用的代码依赖于对服务器环境的了解,则会导致您自己的代码.
正确的解决方案是为您的所有项目创建虚拟主机,甚至是存储在\wamp\www\project1
样式文件夹中的项目.
这样做时,DocumentRoot就是\wamp\www
导致这些问题的原因.
这些工具期望DocumentRoot成为站点的根,即\wamp\www\project1
当他们使用PHP变量时
$_SERVER['HTTP_HOST']
$_SERVER['SERVER_NAME']
$_SERVER['DOCUMENT_ROOT']
Run Code Online (Sandbox Code Playgroud)
他们得到正确的答案,即他们将在一个真正的实时服务器上获得的答案,只有该网站.
所以使用localhost\project1
样式url意味着这些变量会返回
$_SERVER['HTTP_HOST'] = localhost
$_SERVER['SERVER_NAME'] = localhost
$_SERVER['DOCUMENT_ROOT'] = C:/wamp/www
Run Code Online (Sandbox Code Playgroud)
什么时候应该回来
$_SERVER['HTTP_HOST'] = project1
$_SERVER['SERVER_NAME'] = project1
$_SERVER['DOCUMENT_ROOT'] = C:/wamp/www/project1
Run Code Online (Sandbox Code Playgroud)
那么,您应该做些什么来使My Projects
菜单工作并减少将站点复制到实时服务器的痛苦:
在HOSTS文件中为每个项目创建一个条目,并记住创建一个用于通过IPV4(127.0.0.1)访问,一个用于通过IPV6(:: 1)访问: -
127.0.0.1 localhost
127.0.0.1 project1
::1 localhost
::1 project1
Run Code Online (Sandbox Code Playgroud)
请记住在对此文件进行任何更改后刷新Windows DNS缓存,如下所示: -
使用Run as Administrator
并运行命令窗口: -
net stop Dnscache
net start Dnscache
Run Code Online (Sandbox Code Playgroud)
现在您必须创建一个虚拟主机定义,因此编辑该\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhost.conf
文件(apache版本可能不同)
第一次执行此操作时,请删除默认内容.然后像这样创建您的虚拟主机定义: -
#
# Use name-based virtual hosting.
# This next line is not required if you are using Apache 2.4.x and should be deleted
NameVirtualHost *:80
## should be first so the wamp menu page loads and is the default site
## should also never be changed from only allowing access from the local machine
## for a bit of extra security from casual ip address probing
<VirtualHost *:80>
DocumentRoot "C:/wamp/www"
ServerName localhost
ServerAlias localhost
<Directory "C:/wamp/www">
AllowOverride All
<IfDefine APACHE24>
Require local
</IfDefine>
<IfDefine !APACHE24>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 localhost ::1
</IfDefine>
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/wamp/www/project1"
ServerName project1
ServerAlias project1
<Directory "C:/wamp/www/project1">
AllowOverride All
<IfDefine APACHE24>
Require local
</IfDefine>
<IfDefine !APACHE24>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 localhost ::1
</IfDefine>
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
现在您还需要一个更改,您必须取消注释httpd.conf
包含我们刚刚更改的上述文件的行.因此,编辑httpd.conf
文件,使用wampmanager菜单执行此操作,因为它确保您编辑正确的文件.
找到这一行#Include conf/extra/httpd-vhosts.conf
并#
从行的开头删除注释符号,如下所示: -
Include conf/extra/httpd-vhosts.conf
Run Code Online (Sandbox Code Playgroud)
当然,您需要重新启动Apache,以便它获取配置更改.
如果Apache没有重新启动,你可能在配置中犯了一个错误,找出错误的尝试.
打开命令窗口并CD
进入该\wamp\bin\apache\apache2.4.9\bin
文件夹.
然后运行: -
httpd -t
Run Code Online (Sandbox Code Playgroud)
如果错误在httpd.conf
或httpd-vhost.conf
文件中它将告诉您错误,并且还提供行号以使查找错误变得非常容易.
小智 14
在您的www文件夹中,在第30行打开index.php更改:$ suppress_localhost为false
这应该看起来:
$ suppress_localhost = false ;
小智 12
在你的www
文件夹打开index.php
的线30在这里,变化$suppress_localhost
是false
.所以,它应该看起来:
$suppress_localhost = false;
Run Code Online (Sandbox Code Playgroud)
这对我来说是最快捷,最容易解决的问题.我正在使用64位Wamp.
好吧,我遇到了这个问题。因此,我解决了这个问题,并将其追溯到实际的解决方案,而不是黑客。
解决方案:
WAMP Settings
,Add localhost in URL
完毕。剩下的仅供参考如何以及为什么。
注意:localhost/myproject.php 或 myproject.php。尽管解决方案已经被接受,但我看到一些帖子让我感到困惑。可接受的解决方案基于不同服务器应用程序的单个项目,基于OP的具体问题,以及如何影响所讨论的单个项目。但所有其他解决方案都是 hack,并没有真正回答 OP 问题的解决方案,但确实提出了有关 URL 的一个好点。因此,根据其他“解决方案”,以下是如何切换 URL 中的 localhost 引用。因此,我添加了额外的解决方案。
这是一个拨动开关。
故障排除过程(不涉及黑客攻击):
让我们看一下index.php
我们来看看配置文件。注意变量和数组吗?
这是数组。之前使用过的变量。让我们看看...哦,它告诉我们在哪里做什么。
正如解决方案中所述: