我在 apache 中使用通配符
我的APACHE配置:
ServerAlias *.staronece1.com
DocumentRoot /staronece1/domains
我的命名文件
$ttl 38400
staronece1.com. IN SOA staronece1.com. email.yahoo.com. (
1334838782
10800
3600
604800
38400 )
staronece1.com. IN NS staronece1.com.
staronece1.com. IN A 95.19.203.21
www.staronece1.com. IN A 95.19.203.21
server.staronece1.com. IN A 95.19.203.21
mail.staronece1.com. IN A 95.19.203.21
ns1.staronece1.com. IN A 95.19.203.21
ns2.staronece1.com. IN A 95.19.203.21
staronece1.com. IN NS ns1.staronece1.com.
staronece1.com. IN NS ns2.staronece1.com.
staronece1.com. IN MX 10 mail.staronece1.com.
* 14400 IN A 95.19.203.21
*.staronece1.com IN A 95.19.203.21
我的 php 测试文件
/staronece1/domains/index.php
<?php
function getBname(){
$bname=explode(".",$_SERVER['HTTP_HOST'],2);
return $bname[0];
}
echo 'SubDomain is :'.getBname();
?>
如果我去something.staronece1.com
我得到了这个结果SubDomain is : something
不,问题是
if i go to www.staronece1.com
我应该得到空的结果,因为 www 不是子域
但我得到了这个结果
SubDomain is : www
如果我去www.something.staronece1.com
我收到 Firefox 错误信息(未找到站点)
如何解决这个问题?
我认为解决方案是:在命名文件中添加 www 记录
谢谢
答案1
正如 Miles 所评论的,www
是一个常规子域名,与 没什么不同something
。从这个意义上讲,它非常具有误导性,混淆它们不是你的错。
首先,DNS 区域无关紧要:www.staronece1.com
必须解析某个内容,否则网站根本无法工作,所以不要管它。
如果你真的想要这种行为,你需要一个单独的ServerAlias www.staronece1.com
前您当前的通配符ServerAlias
。
最佳匹配集的基于名称的虚拟主机将按照它们在配置中出现的顺序进行处理。将使用第一个匹配的 ServerName 或 ServerAlias,通配符的优先级没有差异(ServerName 与 ServerAlias 的优先级也没有差异)。
http://httpd.apache.org/docs/current/mod/core.html#serveralias
答案2
我不确定我是否理解了问题所在。服务器运行正常。如果问题是 www.something.staronece1.com 无法正常工作,则为 www.something.staronece1.com 添加 DNS 记录,并在 httpd.conf 中添加另一行 serveralias:
ServerAlias *.*.staronece1.com
理想情况下,将其添加到其他 ServerAlias 行下方。