我正在尝试在本地主机上创建子域,但超出了我的范围...我在我的 Mac OS X 上运行 MAMP,我认为/认为我必须执行以下操作:
(假设我想创建 me.localhost.com 和 you.localhost.com)
(1)编辑/private/etc/hosts
现在,它看起来是这样的:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
那么,我是不是应该这样做:
127.0.0.1 localhost
127.0.0.1 me.localhost.com
127.0.0.1 you.localhost.com
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
(2) 我假设我根本不需要处理 DNS,因为它是本地的?那么,hosts 文件就够了吗?
(3)然后,我需要编辑 httpd.conf 文件以包含虚拟主机吗?我试过了,但没有成功……
NameVirtualHost *
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs/me.localhost.com"
ServerName me.localhost.com
</VirtualHost>
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs/you.localhost.com"
ServerName you.localhost.com
</VirtualHost>
不确定我是否偏离了基础...非常感谢您的帮助!
答案1
对于本地名称解析:
您需要 localhost.com 吗?在我的环境中:
$ vi /etc/hosts
127.0.0.1 localhost
127.0.0.1 box1 box2 box3
$ ping box1
返回“127.0.0.1”就好了。
在浏览器中,我还可以解析http://box1,http://box2, 等等。
在 10.5、10.6 上至少我可以确认 OSX 不会覆盖你的 /etc/hosts,这是上一个答案中提出的问题。
对于 Apache,对于每个新的虚拟主机,添加:
<VirtualHost *:80>
ServerName box1
DocumentRoot /full/path/to/documentroot/
...[etc]
</VirtualHost>
由于您的浏览器将正确将“box1”解析为 127.0.0.1,您的请求将被路由到本地框,其中 apache 将读取标头并发现它是针对“box1”的,并将使用相应的虚拟主机。
或者,您也可以使用其中一个(许多?)工具来自动执行此操作,例如(我与此无关,只是在尝试寻找我正在考虑的不同示例时快速谷歌搜索:http://clickontyler.com/virtualhostx/)
答案2
请注意,127.0.0.1 的所有别名都应在一行上指定,否则您会得到奇怪的结果(至少在 Linux 中)。
127.0.0.1 localhost me.localhost.com you.localhost.com
答案3
VirtualHost
获取要定义的虚拟主机的名称。<VirtualHost *>
定义 catch-all 默认值。因此,应该是
<VirtualHost me.localhost.com>
(我希望您意识到me.localhost.com
,严格来说,这是对 TwoCows 命名空间的违反,并且与 完全不同me.localhost
。)
不过,我不太确定 OS X 是否会/多久会覆盖/etc/hosts
。可能需要使用 Open Directory – 但正如我刚刚意识到的那样,它的手册页 (并在那里添加您的条目。man DirectoryService) in Snow Leopard points to a non-existing utility (
/Applications/Utilities/Directory Utility.app
). I.e., you'd need to use dscl
and, probably, go to /Local/Default/Hosts