WAMP - 从项目URL中删除localhost

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/project1url和默认的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.confhttpd-vhost.conf文件中它将告诉您错误,并且还提供行号以使查找错误变得非常容易.


小智 14

在您的www文件夹中,在第30行打开index.php更改:$ suppress_localhost为false

这应该看起来:

$ suppress_localhost = false ;


小智 12

在你的www文件夹打开index.php的线30在这里,变化$suppress_localhostfalse.所以,它应该看起来:

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

这对我来说是最快捷,最容易解决的问题.我正在使用64位Wamp.


ejb*_*tes 5

好吧,我遇到了这个问题。因此,我解决了这个问题,并将其追溯到实际的解决方案,而不是黑客。

解决方案:

  1. 右键单击 WAMP 服务器图标
  2. 选择WAMP Settings
  3. 选择(启用)选项Add localhost in URL


完毕。剩下的仅供参考如何以及为什么。


注意:localhost/myproject.php 或 myproject.php。尽管解决方案已经被接受,但我看到一些帖子让我感到困惑。可接受的解决方案基于不同服务器应用程序的单个项目,基于OP的具体问题,以及如何影响所讨论的单个项目。但所有其他解决方案都是 hack,并没有真正回答 OP 问题的解决方案,但确实提出了有关 URL 的一个好点。因此,根据其他“解决方案”,以下是如何切换 URL 中的 localhost 引用。因此,我添加了额外的解决方案。


这是一个拨动开关。

故障排除过程(不涉及黑客攻击):



让我们看一下index.php

在此输入图像描述


我们来看看配置文件。注意变量和数组吗?

在此输入图像描述


这是数组。之前使用过的变量。让我们看看...哦,它告诉我们在哪里做什么。

在此输入图像描述


正如解决方案中所述:

在此输入图像描述