如何将外部域指向子域?

如何将外部域指向子域?

我有域名example.com,并已设置 Ubuntu Apache 服务器,以便将任何子域指向具有相同名称的目录。

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/html/%1
</VirtualHost>

所以subdomain.example.com会指向example.com/subdomain

我正在尝试允许用户将他们自己的自定义域指向他们选择的子域,我该如何实现这一点,需要哪些记录,以及需要对虚拟主机

我尝试过如下记录:

  • sampledomain.example别名记录记录)- @-->sample.example.com
  • sampledomain.example (A记录)- @-->(IPexample.com 的地址)

我也尝试过使用wwwCNAME 并删除A record

sample.example.com成功指向example.com/sample。但是,sampledomain.example由于某种原因, 却表现得像根站点。

所以如果我访问sampledomain.example/sample,我将获得的内容example.com/sample而不是指向sample.example.com

我该如何解决这个问题?需要哪些记录以及可以对虚拟主机做什么?

我使用了 CNAME 记录,以便当用户访问时我可以通过 PHP 检索自定义域名 - 是否需要 CNAME?

答案1

如果您愿意根据客户要求手动执行此操作,这很容易。您所要做的就是添加ServerAlias sampledomain.com到 vhost 配置并重新加载 Web 服务器配置。

但是,如果您想让客户自己在某种客户控制界面上执行此操作,则由于 Web 服务器上虚拟主机的工作方式,这并不容易实现。原因如下:

如果您有任何 DNS 记录(无论是A还是CNAME)映射sampledomain.com到您的 Web 服务器,浏览器将向您的服务器 IP 地址发送请求,并将 HTTPHost标头设置为sampledomain.com。 Web 服务器将使用此标头来决定哪个虚拟主机应该处理此问题,如果sampledomain.com既不是虚拟主机名也不是别名,则请求将由默认虚拟主机应答,正如您所经历的那样。

为了实现这一点,您需要一种让客户为其虚拟主机配置别名的方法。使用 Apache,这并不容易,但理论上您可以从数据库中读取这些信息,如所解释的那样这里(我从未尝试过,所以我不知道这是否有效)。

还有,虚拟最小在这种情况下可能会有帮助。

相关内容