我目前在WAMP:的httpd.conf文件中有这个
NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
ServerAlias *.dev.co.uk
UseCanonicalName Off
VirtualDocumentRoot D:/wamp/www/%1/httpdocs
</VirtualHost>
我创建了一个目录"foo.bar",然后尝试http://foo.bar.dev.co.uk我得到这个:
未找到
在上找不到请求的URL:此服务器。
我想让这个设置在我的本地apache服务器和我的wamp服务器上运行(我认为语法略有不同)。如果我需要提供更多信息,请留下评论,我会更新的。
我从未使用过VirtualDocumentRoot
,但看到您没有得到任何响应,我会尝试一下。
根据目录名称插值的文档,你的问题似乎在于你使用的%1
,它只匹配http://foo.bar.dev.co.uk
的"foo"。
要匹配"foo.bar",请尝试:
VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs
%1
与"foo"匹配,而%2
与"bar"匹配。添加到每个格式的.0
是为了允许我们在foo和bar之间包含点(因为.
也是一个用来提取匹配单词的子字符串的运算符)。
如果这不起作用,请检查日志以查看Apache实际在查找哪个目录。这可能会为出了什么问题提供线索。
更新
响应:
"这确实使foo.bar.dev.co.uk然而,不幸的是,它停止了foo.dev.co.uk,有什么想法吗?"
使用目录名插值来匹配子域名数量不确定的别名是很棘手的。
最直接的方法是简单地使用%0
,并以完整域名命名目录。
VirtualDocumentRoot D:/wamp/www/%0/httpdocs
这将与目录D:/wamp/www/foo.bar.dev.co.uk/httpdocs
和D:/wamp/www/foo.dev.co.uk/httpdocs
相匹配。
如果您拥有有限的可能域子集,则可以制定更具体的解决方案。例如,如果您有:
- "foo.dev.co.uk"
- "bar.dev.co.uk"
- "foo.bar.dev.co.uk"
- 。。以及"X.Y.dev.co.uk"形式的更多域
然后您可以在处理其他域之前处理前面的VirtualHost块的"foo"one_answers"bar"。
<VirtualHost 127.0.0.1>
ServerAlias foo.dev.co.uk
ServerAlias bar.dev.co.uk
UseCanonicalName Off
VirtualDocumentRoot D:/wamp/www/%1/httpdocs
</VirtualHost>
<VirtualHost 127.0.0.1>
ServerAlias *.dev.co.uk
UseCanonicalName Off
VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs
</VirtualHost>
一些可能支持的注释:
1) 解析本地主机ip
你必须让你的浏览器能够找到127.0.0.1上的内容。因此,如果没有完成,请首先编辑Windows操作系统计算机上的主机文件C:\Windows\System32\drivers\etc\hosts:
127.0.0.1 foo.bar.dev.co.uk
如果不允许在该主机文件中使用通配符。为此,您应安装此。
2) 端口:
确保您的服务器正在侦听http默认端口,例如,不要忘记在httpd.conf文件中添加此指令(因为我没有看到):
Listen 80
3) 控制:
在使用NameVirtualHost XXX.XXX.XXX指令时,请确保与NameVirtualHost指示完全匹配。你的帖子看起来就是这样。
4) 路径:
作为一个Linux用户,这可能是我的一句愚蠢的话,但我认为Windows操作系统需要反斜杠作为路径,而不是斜杠。但我可能肯定错了,不想误导任何人。但是,由于"该目录名称插值模块中的所有指令都将字符串插入路径名,我会检查获得的插值字符串的结果。请参阅下一点。
5) 占位符:
确保模块vhost-alias已加载到您的wamp中。我还建议您在vhost中添加一个指令,这样您就可以在日志中检查所需的插值URL,找出错误,并相应地更正您的apache设置:
LogFormat "%h %l %u %t "%r" %>s %b" common
CustomLog logs/access_log common
6) 现有解决方案
存在的问题总是存在的解决方案:见
一旦你检查了这些点,我想解决方案很快就会出现。