75

我在 Mac OS X 上使用 XAMPP。

我正在尝试为客户正确运行Symfony网站,但我真的不了解 Symfony(还)。我只想安装并启动它。

我以这种方式更改了我的/etc/hosts文件:

127.0.0.1 www.mysite.local

httpd.conf文件是这样的:

<VirtualHost *:80>
  ServerName www.mysite.local
  DocumentRoot /Applications/MAMP/htdocs/mysite/web
  DirectoryIndex index.php
  <Directory /Applications/MAMP/htdocs/mysite/web>
    AllowOverride All
    Allow from All
  </Directory>
  Alias /sf /Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf
  <Directory "/Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

现在,该站点正在运行(耶!),但我无法再访问任何其他本地站点,因为localhost呈现为www.mysite.local

我哪里错了?

4

12 回答 12

119

这对我有用!

运行项目,如http://localhost/projectName

<VirtualHost localhost:80>
   ServerAdmin localhost
    DocumentRoot path/to/htdocs/
    ServerName localhost
</VirtualHost>

要在http://somewebsite.com本地运行项目:

<VirtualHost somewebsite.com:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/somewebsiteFolder
     ServerName www.somewebsite.com
     ServerAlias somewebsite.com
</VirtualHost>

其他网站也一样:

<VirtualHost anothersite.local:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/anotherSiteFolder
     ServerName www.anothersite.local
     ServerAlias anothersite.com
</VirtualHost>
于 2013-10-25T20:02:24.893 回答
30

localhost将始终重定向到127.0.0.1. 您可以通过将其他 VirtualHost 命名为其他本地环回地址来欺骗这一点,例如127.0.0.2. 确保您还更改了相应的hosts文件来实现这一点。

例如,我的httpd-vhosts.conf样子是这样的:

<VirtualHost 127.0.0.2:80>
    DocumentRoot "D:/6. App Data/XAMPP Shared/htdocs/intranet"
    ServerName intranet.dev
    ServerAlias www.intranet.dev
    ErrorLog "logs/intranet.dev-error.log"
    CustomLog "logs/intranet.dec-access.log" combined

    <Directory "D:/6. App Data/XAMPP Shared/htdocs/intranet">
        Options Indexes FollowSymLinks ExecCGI Includes
        Order allow,deny
        Allow from all
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

(请注意,在<VirtualHost>我输入的部分中127.0.0.2:80。这意味着这个 VirtualHost 块只会影响对 IP 地址127.0.0.2port的请求80,这是 HTTP 的默认端口。

要正确路由名称intranet.dev,我的hosts输入行是这样的:

127.0.0.2 intranet.dev

这样,它将阻止您创建另一个 VirtualHost 块localhost,这是不必要的。

于 2013-04-20T04:10:44.540 回答
26

如果你看到它,这是正常的。由于它是第一个虚拟主机条目,它将显示本地主机。

例如,假设您不希望显示该页面。您想要显示的只是“Apache,它可以工作”页面,因此您可以在 mysite.local 作为本地主机之前创建一个vhost条目并将其指向“它可以工作”页面。

但这是正常的。我以前也遇到过这个问题,不用担心!

于 2012-06-12T11:59:29.490 回答
15

你可能想用这个:

<VirtualHost *:80>
    DocumentRoot "somepath\Apache2.2\htdocs"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>

作为您的第一个虚拟主机(将其放在其他虚拟主机之前)。

于 2013-07-08T00:42:12.413 回答
10

在使用 virtualHost 时,我遇到了访问 localhost 的相同问题。我通过在 virtualHost 监听代码中添加名称来解决它,如下所示:

在我的主机文件中,我添加了以下代码(C:\Windows\System32\drivers\etc\hosts) -

127.0.0.1   main_live

在我的httpd.conf中,我添加了以下代码:

<VirtualHost main_live:80>
    DocumentRoot H:/wamp/www/raj/main_live/
    ServerName main_live
</VirtualHost>

而已。它可以工作,我可以同时使用localhostphpmyadminmain_live(我的虚拟项目)。

于 2016-08-19T11:20:08.407 回答
8

官方文档中对约翰·史密斯的回答 的附加描述。了解为什么会这样。

主要主人走了

如果要将虚拟主机添加到现有 Web 服务器,还必须为现有主机创建一个块。此虚拟主机中包含的 ServerName 和 DocumentRoot 应与全局 ServerName 和 DocumentRoot 相同。首先在配置文件中列出此虚拟主机,以便它将充当默认主机。

例如,要与 XAMPP 一起正常工作,以防止 VirtualHost 覆盖主主机,请将以下行添加到文件httpd-vhosts.conf 中

# Main host
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/xampp/htdocs"
</VirtualHost>

# Additional host
<VirtualHost *:80>
    # Over directives there
</VirtualHost>
于 2017-03-12T06:20:01.613 回答
5

对于执行此处描述的所有操作但仍无法访问的人:

XAMPP 与 Apache 2.4:

在文件httpd-vhost.conf 中

<VirtualHost *>
    DocumentRoot "D:/xampp/htdocs/dir"
    ServerName something.dev
   <Directory "D:/xampp/htdocs/dir">
    Require all granted #apache v 2.4.4 uses just this
   </Directory>
</VirtualHost>

这里不需要端口或 IP 地址。Apache 在自己的文件上配置它。不需要 NameVirtualHost *:80; 它已被弃用。你可以使用它,但它没有任何区别。

然后要编辑主机,您必须以管理员身份运行记事本(如下所述)。如果您在不执行此操作的情况下编辑文件,则您正在编辑伪文件,而不是原始文件(是的,它保存等,但它不是真实文件)

在 Windows 中:

找到记事本图标,右键,以管理员身份运行,打开文件,进入C:/WINDOWS/system32/driver/etc/hosts,勾选“查看所有文件”,打开主机。

如果您之前编辑过它,您可能会看到它不是您之前在未以管理员身份运行时编辑的文件。

然后检查 Apache 是否正在读取您的 httpd-vhost.conf,转到文件夹xampFolder/apache/binShift+ 右键单击​​,在此处打开终端命令,打开 XAMPP(如您通常所做的那样),启动 Apache,然后在命令行,输入httpd -S。您将看到虚拟主机列表。只需检查您的something.dev是否​​在那里。

于 2014-03-28T17:55:32.580 回答
3

根据此文档:基于名称的虚拟主机支持

您可能缺少以下指令:

NameVirtualHost *:80
于 2012-06-11T22:31:46.530 回答
3

只需更改<VirtualHost *:80><VirtualHost 127.0.0.1:80>.

然后,默认值DocumentRoot将为指向您的服务器并指定的所有域或 IP 地址提供服务VirtualHost

于 2017-03-25T15:26:39.590 回答
1

这可能是因为您的网络文件夹(如前所述“/Applications/MAMP/htdocs/mysite/ web ”)是空的。

我的建议是先制作你的项目,然后再制作虚拟主机。

我遇到了类似的情况。我在httpd-vhosts.confiz的DocumentRoot中使用了一个空文件夹,但我无法访问我的shahg101.com站点。

于 2016-04-27T07:48:33.400 回答
0

我正在运行Ubuntu 16.04(Xenial Xerus)。这对我有用:

  1. 打开终端并cd/etc/apache2/sites-available. 在那里你会找到一个名为000-default.conf.
  2. 复制该文件:cp 000-default.conf example.local.conf
  3. 打开那个新文件(我使用Nano;使用你喜欢的)。
  4. 您会看到很多注释行,您可以将其删除。
  5. 更改<VirtualHost *:80><VirtualHost example.local:80>
  6. 更改文档根目录以反映文件的位置。
  7. 添加以下行:ServerName example.local如果需要,请添加以下行:ServerAlias www.example.local
  8. 保存文件并重新启动 Apache:service Apache2 restart

打开浏览器并导航到example.local。你应该看到你的网站。

于 2016-10-09T21:32:13.937 回答
0

对于使用 Windows 和Bitnami WAMP堆栈管理器工具的任何人,此虚拟主机配置应进入Bitnami\apache2\conf\bitnami\bitnami.conf

注意:目录部分中的某些设置不是必须的。

例如,我对site.com的虚拟主机配置如下:

<VirtualHost site.com:80>
  DocumentRoot "C:/Bitnami/apache2/htdocs/site/docroot"

  <Directory "C:/Bitnami/apache2/htdocs/site/docroot">
    Options Indexes FollowSymLinks
    AllowOverride All
    <IfVersion < 2.3 >
      Order allow,deny
      Allow from all
    </IfVersion>
    <IfVersion >= 2.3 >
      Require all granted
    </IfVersion>
  </Directory>
</VirtualHost>

请记住,其他朋友提到的 vhost 配置,需要sagits 的答案

于 2021-03-29T11:37:07.363 回答