Apache VirtualHost和localhost

Ang*_*osa 62 apache localhost virtualhost

我正在Mac OS X上使用XAMPP.我正在尝试为客户端运行一个symfony网站,我真的不知道(还)symfony,我只是想安装并启动它.

我用这种方式改变了我的etc/hosts:

127.0.0.1 www.mysite.local       
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

现在,该网站正在运行(耶!),但我无法访问我的其他本地网站,因为localhost 呈现为www.mysite.local.哪里我错了?

谢谢!

Gan*_*tra 91

这对我有用!

运行像这样的项目 http://localhost/projectName

<VirtualHost localhost:80>
   ServerAdmin localhost
    DocumentRoot path/to/htdocs/
    ServerName localhost
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

<VirtualHost somewebsite.com:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/somewebsiteFolder
     ServerName www.somewebsite.com
     ServerAlias somewebsite.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

其他网站也是如此

<VirtualHost anothersite.local:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/anotherSiteFolder
     ServerName www.anothersite.local
     ServerAlias anothersite.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

  • 我觉得这应该是公认的答案.没有端口交换,只是OP的想象. (9认同)
  • 谢谢,太棒了!这对我有所帮助.另外我想说如果有人想运行像'projectname.com'这样的项目,他需要将'projectname.com'添加到`hosts`文件(Ubuntu上的`/ etc/hosts`) (7认同)
  • 为什么要将服务器名称放在“&lt;VirtualHost&gt;”标记中?为什么不保留它“*:80”? (3认同)
  • 但这种配置不能同时使用? (2认同)

Sai*_*ful 28

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>
Run Code Online (Sandbox Code Playgroud)

(请注意,在<VirtualHost>第I部分中键入127.0.0.2:80.这意味着此VirtualHost块只会影响对IP地址127.0.0.2端口的请求80,这是HTTP的默认端口.

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

127.0.0.2 intranet.dev
Run Code Online (Sandbox Code Playgroud)

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

  • 专业提示:不要忘记更改`httpd.conf`中的`Listen`参数以匹配您配置的环回地址. (3认同)

小智 25

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

让我们说例如你不希望该页面显示.你要显示的只是apache它的工作页面,所以你可以在mysite.local之前创建一个vhost条目作为本地主机并将其指向它的工作页面.

但这很正常.我以前遇到过这个问题所以不要担心!

  • 好的,我也在第一个指令之后为localhost添加了一个VirtualHost,现在它可以工作了.谢谢 :) (2认同)

小智 11

你可能想用这个:

<VirtualHost *:80>
    DocumentRoot "somepath\Apache2.2\htdocs"
    ServerName localhost 
</VirtualHost>
<VirtualHost *:80>
Run Code Online (Sandbox Code Playgroud)

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


Raj*_*Raj 10

我在使用virtualHost时遇到了访问localhost的相同问题.我通过在virtualHost中添加名称来解决,如下所示 -

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

127.0.0.1       main_live
Run Code Online (Sandbox Code Playgroud)

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

<VirtualHost main_live:80>
    DocumentRoot H:/wamp/www/raj/main_live/
    ServerName main_live
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

而已.它可以工作,我可以同时使用localhost,phpmyadmin以及main_live(我的虚拟项目).


SiZ*_*iZE 6

约翰·史密斯的回答补充说明从官方文档。了解为什么。

主主机消失

如果要将虚拟主机添加到现有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>
Run Code Online (Sandbox Code Playgroud)


sag*_*its 5

对于执行此处所描述的所有操作且仍无法访问的人:
使用apache 2.4进行Xampp:

在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>
Run Code Online (Sandbox Code Playgroud)


不需要端口或ip,apache在自己的文件上配置它.不需要NameVirtualHost*:80,不推荐使用它,你可以使用它,但没有任何区别.

然后编辑主机,你必须运行NOTEPAD作为管理员(描述的BELLOW),如果你在没有这样做的情况下编辑文件,你正在编辑一个伪文件,而不是原始文件(是的,它保存和狗屎,但它不是真正的文件)
在Windows中:

找到记事本图标,右键单击,以管理员身份运行,打开文件,转到c:/ windows/system32/driver/etc/hosts,选中"查看所有文件",打开主机.

如果你以前在那里编辑它,可能你会看到它不是你以前没有以管理员身份运行时编辑的文件.

然后检查Apache是​​否正在读取你的httpd-vhost.conf,转到xampFolder/apache/bin,shift +右键单击,在这里打开终端命令,打开xampp(正常情况下),启动apache,然后在命令行上,键入httpd -S,您将看到虚拟主机列表,只需检查您的something.dev是否存在.