当域的CNAME映射到子域时,SERVER_NAME会是什么?

时间:2017-06-24 19:08:20

标签: php dns hosting multi-tenant

我正在构建一个多租户php网络应用程序,并且已经设置了我的通配符子域,这些子域正在按预期工作。但是,我试图将域名指向我的应用服务器,如下所示:

记录: domainToRedirect.com 123.123.123.123

CNAME: www subdomain.example.com

当我在浏览器上打印出我的SERVER_NAME变量时,似乎CNAME映射无法正常工作,因为我将 domainToRedirect.com 作为输出。

似乎 domainToRedirect.com 映射到A记录而不是CNAME。

我想要的是一个场景, domainToRedirect.com 只对最终用户显示,就好像他们访问过 subdomain.example.com 但是当然,网址栏显示它们位于 domainToRedirect.com

编辑1:

我需要SERVER_NAME的原因是因为我正在使用它来从我的mysql数据库中的记录中确定我的客户帐户。

我正在使用apache作为我的网络服务器。

编辑2

这是我的vhost文件的样子:

<VirtualHost *:80>
  ServerName  example.com
  ServerAlias www.example.com *.example.com 
  DirectoryIndex index.php
  DocumentRoot /var/www/html/example.com/public_html/public
</VirtualHost>

2 个答案:

答案 0 :(得分:1)

首先,编辑您的虚拟主机信息,然后添加ServerAlias www.subdomain.com并重新启动apache。

其次,您必须使用HTTP_HOST为您提供请求中的主机名,而不是SERVER_NAME,它为您提供Apache上的虚拟主机ServerName

请在此处阅读:https://serverfault.com/questions/496597/php-fpm-server-name-sub-domains-using-nginx

答案 1 :(得分:1)

如果用户正在访问domaintoredirect.com(这是他们的地址栏中显示的内容),那么他们正在访问domaintoredirect.com就是这样。浏览器正在使用domaintoredirect.com Host期间domaintoredirect.com向服务器发送请求。

DNS CNAME只是IP地址配置的别名。

CNAME foo.bar example.com

此DNS条目表示foo.bar规范名称实际上是example.com。换句话说,当尝试向foo.bar发出请求以发现服务器的IP地址时,请求example.com的记录。它涉及的是浏览器如何发现发送请求的IP地址;如果您正在访问foo.bar,那么您仍然在访问foo.bar,并且在访问example.com时,您仍在访问example.com。 CNAME仅用于共享配置信息,指向不同的现有DNS记录,而不是重复信息。

如果要从一个域重定向到另一个域,则需要在HTTP级别执行此操作;对于重定向HTTP,DNS有几个级别太低。你仍然无法“掩盖”一个领域;地址栏中的域是访问域,句点。