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

When a domain's CNAME is mapped to a subdomain what would the SERVER_NAME be?

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

一条记录:domainToRedirect.com123.123.123.123

CNAME: www subdomain.example.com

当我在浏览器上打印 SERVER_NAME 变量时,CNAME 映射似乎没有按预期工作,因为我得到 domainToRedirect.com 作为输出。

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

我想要的是 domainToRedirect.com 对最终用户来说就像他们访问过 subdomain.example.com 当然 URL 栏显示他们在 domainToRedirect.com

编辑 1:

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

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

编辑 2

这是我的虚拟主机文件的样子:

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

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

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

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

如果用户正在访问 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 级别上进行; DNS 的级别太低,无法重定向 HTTP。而且您仍然无法 "mask" 域;地址栏中的域是访问的域,句点。