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

当我将鼠标悬停在链接上方时,目录始终显示为“http://ProjectFolderNameHere/”。应该是“http://LocalHost:8080/ProjectFolderNameHere/”时。我该怎么做才能使链接正常工作?

我的机器在Windows 7 Home Edition 64位上运行,并且我已经禁用了Microsoft的IIS。

最佳答案

如何在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链接。

  • 您将看到一个这样的页面:
    php - 项目链接在Wamp Server上不起作用-LMLPHP
  • 填写每个字段上方的说明所指定的字段
  • 将为您创建虚拟主机配置。
  • 现在,您必须重新启动DNS缓存。您可以从像right click wampmanager->Tools->Restart DNS这样的wampmanager菜单中执行此操作。 DNS缓存将重新启动,然后Apache也将停止并重新启动。当wampmanager图标再次变为绿色时,所有操作均完成。
  • 现在,您必须创建一个简单的index.php文件或将您的站点安装到上面创建的文件夹中。
  • 假设您的VH被称为project.dev,您应该在WAMPServer主页的虚拟主机的部分下看到该名称。
  • 您可以从此菜单启动网站,也可以只使用地址栏中的新域名EG project1.dev并启动网站。

  • 旧的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主页中名为“您的项目”菜单下的链接,并且这些链接将包含指向localhost/subfoldername的链接。
    仅适用于简单教程
    对于初学者来说,这使工作变得容易,并且对于以下学习PHP编码的教程来说,是完全可以接受的。
    但是,从来没有打算在开发一个实际的网站时使用它,以后再将其复制到实时托管的服务器上。
    实际上,如果您确实使用了此机制,则由于 Activity 站点配置与您的开发配置不匹配,通常会引起问题。
    用于实际网站开发的问题
    原因当然是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中创建虚拟主机
    实际上,这对于任何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 local位于同一台PC上。
    步骤2 :
    将您的新域名添加到HOSTS文件中。
    现在,我们需要将在虚拟主机定义中使用的域名添加到HOSTS文件中,以便Windows知道在哪里可以找到它。这类似于创建DNS A记录,但是在这种情况下,仅在此特定PC上可见。
    编辑C:\windows\system32\drivers\etc\hosts该文件没有扩展名,应保持这种状态。当心记事本,如果没有更好的编辑器,它可能会尝试添加.txt扩展名。
    我建议您下载Notepad++,它是免费的且非常好的编辑器。
    这也是一个 protected 文件,因此您必须使用管理员权限对其进行编辑,因此请使用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的大多数窗口操作系统,它就可以使用。
    现在,我们必须告诉窗口刷新其域名缓存,因此再次使用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个新菜单项。默认情况下,一个名为'我的项目'的文件处于打开状态。
    第二个名为'我的虚拟主机',默认情况下未激活。
    “我的项目”将列出\wamp\www目录的任何子目录,并提供一个链接来启动该子目录中的站点。
    就像我之前说的,它启动的是“project1”而不是“localhost/project1”,因此要使链接正常工作,我们必须创建一个虚拟主机定义,以使该链接实际在您的浏览器中启动该站点,而没有虚拟主机定义启动网站搜索作为关键字的站点名称,或者仅返回找不到站点的条件。
    “我的虚拟主机”菜单项有所不同。它搜索用于定义虚拟主机的文件(我们将在稍后介绍),并为找到的每个ServerName参数创建菜单链接,并为每个ServerName参数创建菜单项。
    当我们为\wamp\www文件夹的子目录创建虚拟主机定义后,这似乎有些困惑。某些项目将同时出现在“我的项目”菜单和“我的虚拟主机”菜单上。
    如何打开其他“我的虚拟主机”菜单?
  • 备份\wamp\wampmanager.tpl文件,以防万一您输入错误,它是非常重要的文件。
  • 编辑\wamp\wampmanager.tpl
  • 在[[Menu.Left]]部分中找到此参数;WAMPPROJECTSUBMENU
  • ;WAMPVHOSTSUBMENU参数之前或之后添加此新参数;WAMPPROJECTSUBMENU
  • 保存文件。
  • 现在,右键单击wampmanager图标,然后选择“刷新”。如果未添加菜单,请“退出”并重新启动wampmanager。

  • 大音符
    仅当您已经定义了一些虚拟主机时,才会显示新菜单!否则,在定义VHOST之前,您将看不到任何区别。
    现在,如果将其扩展为逻辑扩展
    现在,只需更改VHOST定义中的DocumentRoot参数,就可以将网站代码完全移到\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而不是连接到Internet。
    还:
    看到我已允许从VHOST定义中的Internet访问此站点,此更改将仅适用于此站点,而不适用于其他任何站点。对于允许客户在一个小时左右的时间内查看您的更改而不必将其复制到实时服务器上非常有用。
    这确实意味着我们必须手动编辑此文件才能打开和关闭此访问权限,而不是使用wampmanager上的“联机/脱机”菜单项。
    另外,我还对PHP配置进行了一些修改,同样仅适用于该站点。
    与您维护的所有其他站点不同,在维护具有特定要求的站点时非常有用。
    我想我们可以根据使用的参数来假设它的某个页面中有一个运行时间较长的页面,并且编写得很差,并且不会在浏览器中显示错误而不会造成页面困惑的情况下运行。相信我这样的网站的存在,人们仍然希望它们维护得不好。但这意味着我们仅需为此特定站点更改这些参数,而不必全局更改为WampServer上运行的所有虚拟站点。

    10-04 13:52