我正在创建软件,允许用户拥有自己的自定义子域(例如:theirsubdomain.mydomain.com)或将CNAME从他们自己的域指向我的网站地址(例如:theirsubdomain.theirdomain.com)。
我已经与我的主人联系过这个,第一个子域名选项很酷。他们将为我设置一个wilcard子域脚本...
他们说我不能自动做CNAME。我将不得不手动进入我的帐户并添加域指向我的网站地址,否则apache现在不会在哪里查找文件。
这是一种常见做法,还是有办法实现自动化?
答案 0 :(得分: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。