6

我正在创建允许用户拥有自己的自定义子域(例如:他们的子域.mydomain.com)或将 CNAME 从他们自己的域指向我的网站地址(例如:他们的子域.theirdomain.com)的软件。

我已经就此联系过我的主机,并且第一个子域选项很酷。他们将为我设置一个通配符子域脚本......

他们说我不能自动执行的 CNAME。我将不得不手动进入我的帐户并添加域以指向我的网站地址,否则 apache 现在不会在哪里查找文件。

这是常见的做法还是有一种自动化的方法?

4

1 回答 1

2

问题是 HTTP 标头。当您请求网页时,浏览器会发送一个请求,该请求以:

GET /mypage.html HTTP/1.1
Host: www.mysite.com

Host项目允许单个 Web 服务器为多个域提供页面。通过查看Host,服务器知道 mypage.html 应该来自它为 mysite.com 存储的文件,而不是来自同一服务器上的 myothersite.com 的文件。

我猜您的站点在您的托管公司的共享 Web 服务器上,他们使用此功能来区分对您站点的请求和对位于同一虚拟框上的其他站点的请求。其中一些虚拟主机,如 HostGator,将允许您指定应在此Host行上接受的其他域以及返回的文档应来自何处。这通常是公司提供的更优质的服务。例如,在 HostGator 上,他们说“婴儿和企业托管计划允许在一个帐户上托管无限域”,但是基本的 Hatchling 计划不允许这样做。

如果您有自己的租用机器并安装了 Apache,您可以自己管理此 HTTP 标头信息的处理。Apache 支持虚拟主机,请参阅以下文档:http ://httpd.apache.org/docs/2.2/vhosts/

因此,基本上,您必须有某种方法告诉 Apache(或您使用的任何服务器)特定Host值的文件对应于您的域的相同文件,因为单个 Apache 服务器可能提供数百​​个不同域的文件。如果您没有管理自己的 Apache 服务器,那么您可以在其中设置虚拟主机,如文档中所示,托管服务必须提供一些自定义方式来获取此信息给 Apache。

于 2012-01-09T22:09:44.780 回答