【问题标题】:Apache 2.2 subdomains are showing same site as of main domainApache 2.2 子域显示与主域相同的站点
【发布时间】:2014-02-01 11:03:30
【问题描述】:

我在 www.domain.com 上有主站点,并创建了一个名为 demo.domain.com 的子域 但是当我尝试访问子域 demo.domain.com 时,它显示的站点与我的主域相同,我该如何解决这个问题? 这是我在

中定义虚拟主机的方式

/etc/httpd/conf/httpd.conf

<VirtualHost *:80>
     ServerAdmin webmaster@domain.com
     DocumentRoot /var/www/domain.com/public_html
     ServerName domain.com
     ServerAlias www.domain.com
</VirtualHost>

<VirtualHost *:80>
     ServerAdmin webmaster@domain.com
     DocumentRoot /var/www/demo.domain.com/public_html
     ServerName demo.domain.com
     ServerAlias www.demo.domain.com
</VirtualHost>

我什至尝试过

service httpd restart

它抛出

Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Mon Jan 13 15:54:14 2014] [warn] _default_ VirtualHost overlap on port 80, the first has precedence

我已经在主机文件中添加了主域和子域

[root@public_html]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
1.2.3.4 domain.com demo.domain.com

我在我的 DNS 管理器中为子域名创建了一条 A 记录,将其指向我的主 vps IP - 地址。 我的 DNS 文件

demo    IN A    1.2.3.4
@           IN A    1.2.3.4
www         IN A    1.2.3.4

所以当我访问 domain.com 和 demo.domain.com 时,它会显示与 domain.com 相同的页面

我在

中创建了一个index.html

/var/www/demo.domain.com/public_html

[root@public_html]# cat index.html
<html>
  <head>
    <title>www.example.com</title>
  </head>
  <body>
    <h1>Success: You Have Set Up a Virtual Host</h1>
  </body>
</html>

那么我该如何解决这个问题?我正在使用 centOS 6, 64 位

当我尝试访问子域 demo.domain.com 时,它显示的站点与我的主域 www.domain.com 相同

【问题讨论】:

  • 你的 httpd.conf 中有 NameVirtualHost *:80 吗?没有这个,你将点击默认的 VirtualHost。
  • 是的,我的 httpd.conf 中有 #NameVirtualHost *:80 但它被注释掉了。
  • 我刚刚将其注释掉,然后重新启动了 apache 和瞧,它可以工作.... +1

标签: apache subdomain document-root


【解决方案1】:

正如 arco444 建议的那样。

试试

cat /etc/httpd/conf/httpd.conf | grep NameVirtualHost

并注释掉

#NameVirtualHost *:80

它会变成

NameVirtualHost *:80

然后输入重启apache

service httpd restart

现在它应该显示子域各自的站点/页面。

【讨论】:

    【解决方案2】:

    当您说“它显示与我的主域相同的站点”时,它是否将子域显示为主域的子目录?例如,www.domain.com/demo/。对于某些控制面板和服务器设置来说,这是相当正常的行为,尽管是不可取的。与其使用 httpd.conf,不如使用 /.htaccess 获得更好的结果:

    RewriteEngine On
    RewriteCond  %{HTTP_HOST}  ^(www\.)?domain\.com  [NC]
    RewriteCond  %{REQUEST_URI}  ^/demo  [NC]
    RewriteRule  ^demo/?(.*)$  http://demo.domain.com/$1  [R=301,L]
    

    【讨论】:

    • 那么当你输入 demo.domain.com 时它到底显示了什么? “它显示相同的站点”是什么意思?如果地址栏显示demo.domain.com,是怎么回事?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多