将 www 作为子域名进行通配符处理

将 www 作为子域名进行通配符处理

我在 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 行下方。

相关内容