当域的 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" 域;地址栏中的域是访问的域,句点。
我正在构建一个多租户 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" 域;地址栏中的域是访问的域,句点。