Wamp server 2.5 页面重定向错误

Posted

技术标签:

【中文标题】Wamp server 2.5 页面重定向错误【英文标题】:Wamp server 2.5 wrong page redirection 【发布时间】:2014-07-17 13:26:37 【问题描述】:

我用 php 5.5 安装了 wamp server 2.5。现在,当我尝试从首页(wamp 主页)访问我的项目页面时,它会重定向到错误的 url,并显示 google 找不到此页面。

问题定义是

我使用http://localhost进入wamp

我有很多项目。假设我点击sample_project

然后页面重定向到sample_projects/

谷歌浏览器显示错误chrome cannot find this webpage

在我的 wamp PHP 扩展区域中有两个字段被标记为红色标记。他们是php_enchantphp_opcache

我的 wamp 有什么问题??我错过了什么吗?请帮忙

【问题讨论】:

【参考方案1】:

老实说,我认为为每个..单个..项目创建虚拟主机效率非常低。所以在调查之后我发现了一个关键变量:

wamp/www/index.php.

经过快速分析,该变量的明显目的是删除项目链接中的“localhost”。

改变这一行:

$suppress_localhost = true;

到这里:

$suppress_localhost = false;

【讨论】:

效率如何。完成第一个设置后,每个项目需要 2 分钟。 这太愚蠢了,我不得不这样做,但我很高兴你明白了这一点。我正要对链接进行硬编码哈哈。谢谢人 随着每个下一个 wamp 版本的新白痴技巧。他们为什么要这样对我们?感谢您的出色回答(: kristengrote.com/blog/articles/… VirtualHost存在的原因是在一台主机上有多个项目,如果你不知道如何使用它只会低效..【参考方案2】:

WAMPServer 2.5 主页您的项目菜单和虚拟主机

WampServer 2.5 中的概念发生了变化,这种变化有充分的理由!

在 WampServer 2.5 中,现在强烈建议为您的每个项目创建一个虚拟主机,即使您当时持有 \wamp\www\subfolder 结构。

Virtual Hosts Documentation

Virtual Host Examples

WampServer 主页 (\wamp\www\index.php) 现在要求您为所有项目创建一个虚拟主机,因此只有这样做才能正常工作。

历史

为了让使用 WampServer 的初学者更轻松地学习 PHP Apache 和 mysql,建议您在 \wamp\www\ 文件夹下创建子文件夹。

wamp
  |-- www
       |-- Chapter1
       |-- Chapter2
       |-- etc

然后,这些子文件夹将在 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 中创建虚拟主机

实际上,这对于任何 wndows Apache 服务器应该基本相同,不同之处仅在于您可以找到 Apache 配置文件的位置。

在 Apache 中创建您的第一个虚拟主机需要 3 个步骤,如果您已经定义了一个,则只需 2 个。

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

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

编辑 WampServer 所在的名为 httpd-hosts.conf 的文件

\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 上,因此local

设置 2

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

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

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

此外,这是一个受保护的文件,因此您必须使用管理员权限对其进行编辑,因此请使用 Run as Administrator 菜单选项启动您的编辑器。

完成这些编辑后,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 开始就可以使用。

现在我们必须告诉 Windows 刷新其域名缓存,所以再次使用 Run as Administrator 菜单选项再次启动命令窗口,然后执行以下操作。

net stop dnscache
net start dnscache

这会强制 Windows 清除其域名缓存并重新加载它,在重新加载时它将重新读取 HOSTS 文件,因此它现在知道域 project1

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

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

在 httpd.conf 中找到这一行

# Virtual hosts
#Include conf/extra/httpd-vhosts.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 个新菜单项。一个名为 [b]'My Projects'[/b] 默认打开。 还有第二个,叫做 [b]'My Virtual Hosts'[/b],默认没有激活。

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

“我的虚拟主机”菜单项略有不同。它搜索用于定义虚拟主机的文件(我们将在稍后介绍)并为它找到的每个 ServerName 参数创建菜单链接,并为每个参数创建一个菜单项。 这似乎有点令人困惑,因为一旦我们为 \wamp\www 文件夹的子目录创建了虚拟主机定义,一些项目将同时出现在“我的项目”菜单和“我的虚拟主机”菜单上。

如何打开另一个“我的虚拟主机”菜单?

备份 \wamp\wampmanager.tpl 文件,以防万一,这是一个非常重要的文件。 编辑 \wamp\wampmanager.tpl 在“[Menu.Left]”部分找到这个参数;WAMPPROJECTSUBMENU。 在;WAMPPROJECTSUBMENU 参数之前或之后添加这个新参数;WAMPVHOSTSUBMENU。 保存文件。 现在右键单击 wampmanager 图标,然后选择“刷新”。如果这没有添加菜单,请“退出”并重新启动 wampmanager。

大笔记 仅当您已经定义了一些虚拟主机时,才会出现新菜单!否则,在您定义 VHOST 之前,您将看不到任何区别。

【讨论】:

我认为这行得通。但是当我这样做时,在如上所述更改所有内容后,沼泽出现绿色。但是 localhost 说“您没有访问此站点的权限”.. 为什么会这样? 在运行 WAMPServer 的同一台 PC 上浏览时是否出现此错误? 是的.. 在我安装 WAMP 服务器的同一台电脑上 你的apache错误日志和apache访问日志告诉你什么?【参考方案3】:

我不敢相信 Wampserver 现在希望每个人都在他们的笔记本电脑上离线为每个正在开发的项目创建一个虚拟主机? 您的说明似乎非常好,但对于初学者来说可能太复杂了(另外,我怀疑您说明中的文件路径步骤 2:将新域添加到 HOSTS 文件仅适用于 32 位 Windows)?

上述 Rogue 的解决方案(将 $suppress_localhost="true"; 更改为 $suppress_localhost="false"; 在 c:/wamp/www/index.php 中)对于 99% 开发超过一个网站在他们的笔记本电脑上。

此外,将已完成的网站上传到在线服务器不会造成任何实际问题。 但是也许 Wampserver 有另一个原因添加 $suppress_localhost 代码?

【讨论】:

上述解决方案是正确的,并且 HOSTS 文件也适用于 64 位 Windows,而不仅仅是 32 位。试试看吧。

以上是关于Wamp server 2.5 页面重定向错误的主要内容,如果未能解决你的问题,请参考以下文章

虚拟主机 - 全部重定向到 WAMP 本地主机“主页”页面

Struts2页面重定向

如何将所有访客请求重定向到 Laravel 应用程序中的登录页面?

Wamp环境域名重定向问题

WAMP 的远程访问重定向到重复的 url

将任何子域重定向到主域上的页面