项目链接在Wamp服务器上不起作用

时间:2014-05-14 21:02:22

标签: php mysql apache wamp wampserver

我正在另一台计算机上安装Wamp Server以运行中型数据库和UI。我成功地阻止了IIS并将服务器路由到Localhost:8080。但每当我尝试从localhost主页访问我的项目时,在www文件中;我被重定向到Page not found错误。

当我将鼠标悬停在链接上方时,目录总会出现" http:// ProjectFolderNameHere /"。当它应该是" http:// LocalHost:8080 / ProjectFolderNameHere /"。我该怎么做才能使链接正常工作?

My Machine在Windows 7家庭版64位上运行,我已经禁用了Microsoft的IIS。

13 个答案:

答案 0 :(得分:148)

如何在WampServer中创建虚拟主机


WAMPServer 3让这个过程变得更加容易!

您可以使用作为WAMPServer一部分提供的实用程序执行几乎所有操作。

  • 在里面创建一个包含project.site的文件夹。这可以位于C:\wamp\www\目录下,也可以位于C:\websites之类的完全独立的文件夹中。

  • 在您选择EG C:\websites\project1\wwwc:\wamp\www\project1\www

  • 下的位置内创建一个文件夹
  • 现在打开localhost wampmanager->localhost,然后点击主页上工具栏下的Add a Virtual Host链接。

您会看到如下页面:

enter image description here

  • 填写每个字段上方说明中指定的字段

  • 将为您创建虚拟主机配置。

  • 现在您必须重新启动DNS缓存。您可以通过wampmanager菜单执行此操作,例如right click wampmanager->Tools->Restart DNS。 DNS缓存将重新启动,然后Apache也将停止并重新启动。当wampmanager图标再次变为绿色时,一切都已完成。

  • 现在,您必须创建一个简单的index.php文件,或将您的网站安装到您在上面创建的文件夹中。

  • 假设您的VH已被调用project.dev您应该在WAMPServer主页的您的虚拟主机部分下看到该名称。

  • 您可以从此菜单启动该网站,或者只使用地址栏EG project1.dev中的新域名和网站shoudl启动。


旧的WAMPServer 2.5机制,或者如果您想手动完成

WampServer 2.5及更高版本的概念发生了变化,这是一个很好的理由!

在WampServer中,现在强烈建议您为每个项目创建一个虚拟主机,即使您将它们保存在\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主页中名为&#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,那么当您将网站移动到实时服务器时,这会导致问题

如何在WampServer中创建虚拟主机

实际上,对于任何wndows Apache服务器,这应该基本相同,只是在你可能找到Apache配置文件的地方有所不同。

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

  1. 创建虚拟主机定义
  2. 将新域名添加到HOSTS文件中。
  3. 取消注释httpd.conf中包含虚拟主机定义文件的行。
  4. 第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位于同一台PC上,因此{{1} }。

    第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个新菜单项。一个名为&#39;我的项目&#39; ,默认情况下已启用。 第二个名为&#39;我的虚拟主机&#39; ,默认情况下未激活。

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

    我的虚拟主机&#39;菜单项有点不同。它搜索用于定义虚拟主机的文件(我们将在一分钟内完成)并为它找到的每个ServerName参数创建菜单链接,并为每个创建一个菜单项。 这可能看起来有点混乱,因为一旦我们为\ wamp \ www文件夹的子目录创建虚拟主机定义,一些项目将出现在两个“我的项目”中。菜单和“我的虚拟主机”&#39;菜单&#39; S

    如何关闭此其他“我的虚拟主机”#39;菜单上?

    • 备份\ wamp \ wampmanager.tpl文件,以防万一你弄错了,这是一个非常重要的文件。
    • 编辑\ wamp \ wampmanager.tpl
    • 在&#39; [Menu.Left]&#39;中找到此参数Syntax OK 。部分。
    • ;WAMPPROJECTSUBMENU参数之前或之后添加此新参数;WAMPVHOSTSUBMENU
    • 保存文件。
    • 现在右键单击wampmanager图标,然后选择&#39; Refresh&#39;。如果这不添加菜单,退出&#39;并重新启动wampmanager。

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

    现在,如果您将此视为其逻辑扩展名

    现在,只需更改VHOST定义中的DocumentRoot参数,即可将网站代码完全移出;WAMPPROJECTSUBMENU文件夹结构。例如,你可以这样做:

    在wamp磁盘或任何其他磁盘上创建一个文件夹(注意网络驱动器,它们有点复杂)

    \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而不是上网。

    ALSO: 看到我允许从VHOST定义中从互联网访问此站点,此更改将仅适用于此站点而不适用于其他站点。非常有用,允许客户端在一小时左右的时间内查看您的更改,而无需将其复制到实时服务器。 这意味着我们必须手动编辑此文件以打开和关闭此访问权限,而不是使用wampmanager上的Put Online / Offline菜单项。

    此外,我已经添加了一些对PHP配置的修改,再次只适用于这一个站点。 与您维护的所有其他站点不同,在维护具有特定要求的站点时非常有用。 我想我们可以从所使用的参数中假设它在某个地方有一个长时间运行的页面并且编写得非常糟糕,并且不会在浏览器上显示错误而不会使页面出现可怕的混乱。相信我这样的网站存在,人们仍然希望他们严重。但这意味着我们只需更改此特定站点的这些参数,而不是全局更改为WampServer上运行的所有虚拟站点。

答案 1 :(得分:74)

我相信这是最好的解决方案:

在www文件夹中打开index.php并设置

更改行 30:$suppress_localhost = true;

$suppress_localhost = false;

这将确保项目以您的本地主机IP /名称为前缀

答案 2 :(得分:24)

index.php文件夹中打开www并设置

$suppress_localhost = false;

这会将http://localhost/添加到您的项目链接

答案 3 :(得分:10)

要从主页访问项目,您需要先创建虚拟主机

  

最简单的方法是使用Wamp的添加虚拟主机实用程序。

请按以下步骤操作:

  1. “C:\ wamp \ www \”目录中创建一个文件夹,并为其指定一个名称,例如您要为您的网站提供的名称。 '的 mysite的 '。所以路径将是“C:\ wamp \ www \ mysite”
  2. 现在在浏览器中打开localhost的主页,在工具菜单下单击添加虚拟主机链接。
  3. 输入虚拟主机的名称,该名称必须是我们在 www 目录中创建的文件夹的名称,即' mysite ”。
  4. 输入虚拟主机的绝对路径,即“C:\ wamp \ www \ mysite \”,不带引号,然后点击下面的按钮说'启动创建VirtualHost'
  5. 创建了虚拟主机,现在您只需要'重新启动DNS'。要执行此操作,请右键单击wamp服务器的托盘菜单图标,然后单击工具&gt;重新启动DNS ,让托盘菜单图标再次变为绿色。
  6. 全套!现在只需在“C:\ wamp \ www \ mysite \”目录中创建'index.php'页面。在'index.php'文件中添加一些代码,例如
    /contract/
  7. 现在您可以从localhost的主页访问项目。只需点击项目链接,您就会在屏幕上看到“Hello World”。

答案 4 :(得分:2)

如何修复损坏的图标链接(blank.gif,text.gif等)

不幸的是,如前所述,只是将虚拟主机添加到项目中并不能修复损坏的图标链接。

问题:

WAMP / Apache不会将图标的目录引用更改为相应的安装目录。它静态设置为“c:/ Apache24 / icons”,99.9%的用户Apache安装不在此处。尤其是WAMP。

修复:

  1. 找到您的Apache图标目录!通常它位于此处:“c:/wamp/bin/apache/apache2.4.9/icons”。但是,您的里程可能因安装而异,如果您的Apache版本不同,那么您的路径也会有所不同。\

  2. 在您喜欢的编辑器中打开httpd-autoindex.conf。这个文件通常可以在这里找到:“C:\ wamp \ bin \ apache \ apache2.4.9 \ conf \ extra \ httpd-autoindex.conf”。同样,如果你的Apache版本不同,那么这条路也是如此。

  3. 找到此定义(通常位于文件顶部附近):

    Alias /icons/ "c:/Apache24/icons/"
    
    <Directory "c:/Apache24/icons">
    Options Indexes MultiViews
    AllowOverride None
    Require all granted
    </Directory>
    
  4. 用您自己的目录替换“c:/ Apache24 / icons /”目录。 重要 您必须在第一个目录引用中有一个前瞻性斜杠。第二个目录引用必须没有尾部斜杠。您的结果应该与此类似。同样,您的目录可能有所不同:

    Alias /icons/ "c:/wamp/bin/apache/apache2.4.9/icons/"
    
    <Directory "c:/wamp/bin/apache/apache2.4.9/icons">
    Options Indexes MultiViews
    AllowOverride None
    Require all granted
    </Directory>
    
  5. 重新启动Apache服务器,享受炫酷的图标!

答案 5 :(得分:2)

您可以按照@RiggsFolly的所有步骤进行操作,这是非常好的答案,如果您不想创建虚拟主机并希望像以前的localhost / example /那样使用,您可以使用@Arunu的答案

但如果您仍然遇到问题,请使用此方法,

  1. 找到已安装的wamp文件夹(例如c:/ Wamp /)
  2. Goto Wamp / www /
  3. 打开index.php文件
  4. 找到此代码$projectContents .= '<li><a href="'.($suppress_localhost ? 'http://' : '').$file.'">'.$file.'</a></li>';
  5. 修改它在http:// $projectContents .= '<li><a href="'.($suppress_localhost ? 'http://localhost' : '').$file.'">'.$file.'</a></li>';
  6. 之后添加localhost
  7. 重启wamp服务器
  8. open localhost请参阅更新后的链接
  9. 希望你的网址像以前版本的wamp服务器一样。

答案 6 :(得分:1)

$suppress_localhost = false;

这对我有用。

答案 7 :(得分:1)

这适用于Wamp 3 +。

  • 转到wamp文件夹(wamp /或wamp64 /)
  • 打开wampmanager.conf
  • 找到urlAddLocalhost参数并将其设置为:urlAddLocalhost = "on"

不应该在www文件夹中调整index.php。

答案 8 :(得分:0)

Re:Wampserver LocalHost链接无法正常工作
这是截至2014年6月的Wampserver2.5(也许他们会在以后的版本中解决这个问题) 注意:要使用LocalHost:8080而不是LocalHost,只需在下面提到的编辑中进行适当的更改。

这个问题有两个方面 -
第一种是能够从Wamp localhost主页访问“您的项目”下的项目 第二个是能够正确访问Wampserver图标任务栏的“我的项目”列表中列出的项目。

要修复第一个(为了能够从Wamp localhost主页访问“您的项目”下的项目),您需要执行以下操作...

您必须在位于wamp \ www文件夹中的index.php文件中进行2次编辑(通常为C:\ wamp \ www)

1)第30行更改

  $suppress_localhost = true;

  $suppress_localhost = false;

2)在第338行更改

  $projectContents .= '<li><a href="'.($suppress_localhost ? 'http://' : '').$file.'">'.$file.'</a></li>';

  $projectContents .= '<li><a href="'.($suppress_localhost ? 'http://' : 'http://localhost//').$file.'">'.$file.'</a></li>';

完成上述编辑后 - 如果Wampserver正在运行,只需刷新本地主机页面即可立即生效。

修复第二项(Wampserver图标任务栏的“我的项目”列表): 您需要编辑C:\ wamp \ scripts \ refresh.php

找到第651行并更改读取行

的部分
   Parameters: "http://'.$projectContents[$i].'/"; Glyph: 5

   Parameters: "http://localhost//'.$projectContents[$i].'/"; Glyph: 5

进行第二组更改后,您可能必须通过切换Wamp Icon Tray App底部的Put Online / Offline选项,强制Wampserver刷新“我的项目”列表。

答案 9 :(得分:-1)

  1. 检查wamp服务器图标是否为绿色,如果它是绿色然后它正在工作,如果没有那么你必须按照这些步骤来做

    一个。在运行wamp之前应关闭所有程序,因为大多数情况下某些软件如skype采用wamp使用的相同端口(80)。

    湾你可以改变Skype的端口:工具-s-&gt; oprions-&gt;高级 - >连接解开使用端口80

  2. 重新启动它会起作用。

  3. 第二案例

    1. 当你在loalhost中单击项目时,它没有显示项目名称的localhost infront,因此看起来wamp不起作用,那么你只需要做一件事

      。转到wamp index.php文件并更改$ suppress_localhost = false;来自$ suppress_localhost = true;或者反之亦然,它会起作用

答案 10 :(得分:-1)

导航到您的www目录(如果您使用的是wamp服务器)htdocs(如果在XAMPP上)。打开您的admin.php并搜索项目内容/或直接转到第339行并更改链接,将本地主机插入链接。

那应该有效,

答案 11 :(得分:-1)

我发现通过项目创建本地子域并告诉Apache按名称服务多个站点要容易得多(比接受的答案)。

例如,我们假设您在c:/wamp64/www/sites/mysite下创建了一个项目,以便能够在http://mysite.localhost访问该项目,您只需执行以下操作:

<强> 1。告诉您的机器回答不同的名称127.0.0.1 mysite.localhost添加到C:\windows\system32\drivers\etc\hosts

<强> 2。刷新DNS缓存 以管理员身份打开命令提示符,然后键入net stop dnscache,然后键入net start dnscache

第3。告诉Apache在哪里看 点击托盘中的Wamp图标,转到Apache - &gt; httpd.conf,并在最后添加:

# Tells Apache to identify which site by name
NameVirtualHost *:80
# Tells Apache to serve the default WAMP Server page to "localhost"
<VirtualHost 127.0.0.1>
ServerName localhost
DocumentRoot "C:/wamp/www"
</VirtualHost> 
# Tells Apache to serve Client 1's pages to "client1.localhost"
# Duplicate and modify this block to add another client
<VirtualHost 127.0.0.1>
# The name to respond to
ServerName client1.localhost
# Folder where the files live
DocumentRoot "C:/wamp64/www/sites/mysite"
# A few helpful settings...
<Directory "C:/wamp64/www/sites/mysite">
allow from all
order allow,deny
# Enables .htaccess files for this site
AllowOverride All
</Directory>
# Apache will look for these two files, in this order, if no file is specified in the URL
DirectoryIndex index.html index.php
</VirtualHost> 

source

<强> 4。重启Apache 单击托盘中的Wamp图标,选择&#34;重新启动&#34;

<强> 5。定义基本网址 转到项目文件夹,将<base href="http://mysite.localhost" />添加到<head>部分,以防止/链接到服务器根目录。

就个人而言,我使用PHP(类似$site_root = (IS_LOCALHOST) ? '<base href="http://mysite.localhost" />' : null;)动态地将这个html代码注入我的模板中,因此我不必在生产时将其删除一次。

答案 12 :(得分:-3)

您好需要从wamp服务器打开index.php并更改$ suppress_localhost = false;来自$ suppress_localhost = true;然后你的wamp会正常工作