如何在XAMPP(Windows)上设置Apache虚拟主机

40

如何在XAMPP(Windows)上设置Apache虚拟主机


太好了,看起来就是这样了。我是将标签添加到现有的两个中还是覆盖它们? - user3949359
如果可能的话,我想为一个项目配置我的虚拟主机。根据这个CMS文档:http://nnb.geomash.com/documentation/1.6/basic-installation/webserver-configuration - user3949359
好的,我理解您的意思是:您已经安装了带有Apache Web服务器的XAMPP,并且想要为一个应用程序创建单独的虚拟主机;假设您的主Web服务器是http://localhost,而您的新应用程序是http://cms.localhost?是这样吗? - Maytham Fahmi
据我理解,vhosts 用于在同一台机器上运行多个域名。这正是我想要实现的。此外,文档教程告诉你如何做到这一点(这让我觉得即使我现在不知道它,它也会在某个时候派上用场)。 - user3949359
4个回答

116

在Windows上使用Apache创建虚拟主机需要遵循一些步骤。

注意:首先,对于此指南,在XAMPP和WAMP或其他Windows上的Apache软件包之间唯一的区别是关于这些软件包在计算机上安装的位置的问题。

介绍:虚拟主机(vhost)是一个很好的解决方案,如果您打算在PHP中开发许多独立项目,并将它们彼此隔离,例如:

  • 项目1基于PHP,本地URL地址为php.localhost
  • 项目2是一个Laravel项目,URL为laravel.localhost
  • 项目3是一个Codeigniter,URL为codeigniter.localhost
  • 项目4是一个WordPress,URL为wordpress.localhost

您应该已经安装了最新版本的XAMPP/WAMP。顺便说一句,在我的情况下,我只安装了Apache和MySQL。

*注意:默认情况下,大多数web服务器会使用端口80作为默认端口。在某些情况下,如果您安装了其他web服务器(如Microsoft IIS),它也会使用端口80,或者在其他情况下,SKYPE有时也会像在Windows 8/10的某些用户中那样使用端口80。在这种情况下,您可以做两件事:
  • 将您的Apache端口更改为端口8080、8081等,或一些其他空闲端口(请注意:8080有时也会出现一些问题)
  • 或者,在Skype的情况下,将其他软件/IIS端口更改并保持Apache默认端口80不变,只需关闭Skype应用程序,然后在将Apache安装在端口80之后重新启动它,Skype将自动获取新端口。
我选择将我的Apache更改为端口8080
*注意:
  • 对于接下来的部分,我们需要使用像记事本或常规IDE这样的文本编辑器。我使用的是sublime文本编辑器。
  • 如果您将Apache保留为默认端口80,请跳过此部分并转到虚拟主机。

更改XAMPP/WAMP端口(仅在必要时) 如果保留默认设置,则跳转到设置虚拟主机

步骤1. 编辑httpd.conf文件

单击Config -> Apache (httpd.conf) 或者您可以在以下位置找到该文件:C:\XAMPP\apache\conf\httpd.confC:\XAMPP\apache2\conf\httpd.confC:\Bitnami\wampstack\apache\conf\httpd.confC:\Bitnami\wampstack\apache2\conf\httpd.conf或类似位置。

更改带有以下内容的行:

Listen 80

使用8080或其他空闲端口。

Listen 8080

当我们打开httpd.conf文件时,需要确保包含httpd-vhosts.confInclude conf/extra/httpd-vhosts.conf

虚拟主机

注意:默认情况下,服务器文档位于C:\XAMPP\htdocsC:\Bitnami\wampstack\apache2\htdocs,如果您只有一个项目或许多小的测试文件,则可以使用这些位置。但是,如果您需要开发许多项目,则建议通过虚拟主机将它们分开,如前面所述。

第二步:设置虚拟主机

  1. 为您的项目创建一个文件夹;我已经在c:\vhost中创建了一个,您可以将其命名为projects等。
  2. c:\vhost文件夹中,我们创建一个子文件夹domain1或project1或其他任何名称,这取决于您(c:\vhost\project1)
  3. 打开C:\XAMPP\apache\conf\extra\httpd-vhosts.conf文件,根据您要创建的虚拟主机数量在行上添加以下代码:
<Directory C:/vhost>
    AllowOverride All
    Require all granted
</Directory>

#this is the default address of XAMPP    
<VirtualHost *:8080>
    DocumentRoot "C:/XAMPP/htdocs/"
    ServerName localhost
</VirtualHost>

#this is the first vhost address in XAMPP
<VirtualHost *:8080>
    DocumentRoot "C:/vhost/project1/"
    ServerName php.localhost
    SetEnv NS_ENV variable_value
</VirtualHost>

#this is the second vhost address in XAMPP for project like Laravel
<VirtualHost *:8080>
    DocumentRoot "C:/vhost/Laravel-Blog/public"
    ServerName laravel.localhost
</VirtualHost>

etc

注意:如果您正在使用 Laravel 项目,则可以创建无限数量的 Laravel 项目以及其他框架,如 CodeIgniter、Yii 等。重点是将您的 Laravel 项目/放在 c:\vhost\laravel1、c:\vhost\laravel2 等位置,并像之前展示的那样将 c:\vhost\laravel1\public 作为 DocumentRoot 等。每个 Laravel 项目都将有自己的虚拟主机 URL。
保存并关闭文件。
一些额外的信息和注释:
- 如果端口保持默认值 80,则 URL 地址将为 localhost。 - 如果端口保持默认值 80,则 VirtualHost 标记应更改为 。 - 如果端口更改为 8080,则 URL 地址将为 localhost:8080。 - vhost URL 地址可能看起来像这样 project1.localhost:8080 等。 - 您可以通过这种方式添加无限数量的项目和虚拟主机。

步骤三. 编辑 Windows Hosts 文件

  1. 停止 XAMPP/WAMP 中的 Apache 和 MySQL 服务。
  2. 打开位于 C:\windows\system32\drivers\etc 的 hosts 文件,需要管理员权限才能编辑该文件。建议使用 Sublime 文本编辑器直接编辑该文件。
  3. 在文件末尾添加 127.0.0.1 project1.localhost,保存并关闭文件。
127.0.0.1       localhost
127.0.0.1       php.localhost
127.0.0.1       laravel.localhost
127.0.0.1       codeigniter.localhost
127.0.0.1       wordpress.localhost
127.0.0.1       laravel2.localhost
etc. those are just examples

保存文件

最后一步。 重新启动您的Apache和MySQL。


加法(建议)

注意:在您的开发过程中,您可能会遇到一个问题,即由于缓存的存在,如果您更新 Laravel 中的某些内容,则它不会在浏览器中显示。因此,在本地环境下的开发过程中,您可能需要禁用 PHP 缓存。

打开 Apache(XAMPP 或 WAMP)文件夹中的 PHP 文件夹下的 php.ini 文件,并将 opcache.enable 更改为 0,以使其如下所示:

[opcache]
zend_extension=php_opcache.dll
; Determines if Zend OPCache is enabled
opcache.enable=0

加法(替代方案)

重要提示:以下解决方案不适用于测试Restful Api、画布、重型解决方案等,可能会给您带来一些麻烦,因此我建议使用端口80作为默认的虚拟主机解决方案。

可以部署一个临时虚拟服务器,而无需配置XAMPP/WAMP虚拟主机,启动CMD控制台,并运行以下PHP命令:

php -S localhost:8001 -t c:\vhost\Laravel-Project\public
  • 端口8001可以更改为任何可用的端口号,确保不与其他软件端口冲突。
  • c:\vhost\Laravel...路径应更改为您的项目路径。
  • 可以启动多个服务器,但应具有不同的端口号。

在您的浏览器中,您只需要编写

http://localhost:8001/

关于 403 访问被禁止错误的说明

如果您在浏览您的网站时遇到了 403 访问被禁止的错误,您可能需要将以下内容添加到您的 httpd.conf 文件中:

<Directory path_to_dir>
    AllowOverride none
    Require all granted
</Directory>

2
如果您在浏览网站时遇到403访问被禁止的错误,您可能需要将以下内容添加到您的httpd.conf文件中:<Directory path_to_dir> AllowOverride none Require all granted </Directory> - Webucator
有没有办法从URL中去掉“:8001”?我的意思是,我能否让http://local.xyz.com指向http://localhost:8001/xyz/public - George
@maytham-ɯɐɥʇʎɐɯ 是的,我按照指南操作了,感觉非常棒。一次就成功了,谢谢你。我的80端口也被其他东西占用了,所以我使用8989端口,想知道是否可能不在URL中写入它,例如从vhost配置或主机文件中强制它。 - George
据我所知,我认为这是不可能的,不过我以前从未尝试过,也没有研究过这种可能性。我刚在 Google 上进行了一个快速搜索,并找到了一些链接,您可以阅读 https://webmasters.stackexchange.com/questions/55123/can-dns-point-to-specific-port - Maytham Fahmi
1
@maytham-ɯɐɥʇʎɐɯ,我刚刚阅读了您提供的链接,看起来目前似乎不可能实现,所以我将尝试释放端口80,因为这比尝试实现我想要的更容易,是的,我很懒 :d,如果我在这个主题上找到更多信息,我会在这里链接它。非常感谢您的帮助,祝您有愉快的一天。 - George

2
你可以让本地主机指向不同端口号上的不同文件夹。按照以下简单步骤操作:
第一步:使你的Apache监听多个端口。打开 C:\xampp\apache\conf\httpd.conf 文件,搜索关键字Listen,你将看到类似于 Listen 80 的内容。现在请告诉你的Apache监听多个端口,替换成以下内容:
Listen 80 Listen 8001 Listen 8002
第二步:现在进入“C:\xampp\apache\conf\extra\httpd-vhosts.conf”文件,在文件末尾添加以下内容:
DocumentRoot "C:/xampp/htdocs/project1" ServerName localhost:8001
DocumentRoot "C:/xampp/htdocs/project2" ServerName localhost:8002
这样告诉你的Apache在访问不同的端口号时引用不同的文件夹。当你访问 localhost:8001/ 时,它会去加载 project1 文件夹中的内容;同理,localhost:8002/ 将指向 project2 文件夹。
通过这种方法,我们可以在本地计算机上运行两个不同的站点。
注意:每当你更改 httpd.conf 或 httpd-vhosts.conf 文件时,你需要重新启动你的Apache。

其他人请注意:分别使用<VirtualHost *:8001>和<VirtualHost *:8002>! - kpollock

1
Virtual Host创建
  1. 打开C:\xampp\apache\conf\extra文件夹下的httpd-vhost文件,然后添加以下内容:
    DocumentRoot "C:\xampp\htdocs\project\timegrid\public" ServerName mytimegrid.me(您的选择)
  2. 打开C:\Windows\System32\drivers\etc文件,然后添加以下内容:127.0.0.1 mytimegrid.me(您的域名)

注意:您需要以管理员身份运行编辑器(例如记事本),否则无法保存这些文件。好了。


0
首先,以管理员身份打开您的记事本,然后单击“文件>打开”。然后转到您的窗口驱动器,现在搜索system32文件夹,然后搜索drivers文件夹,再搜索etc文件夹。
现在您将看到一个空文件夹,所以不用担心底部会看到文本文档(*.txt)。将视图更改为所有文件,然后您将看到vhost文件。
打开并享受!

你把这个当做答案? - user13944038

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接