我有一个相当noob问题如何子域名的工作。
据我了解,首先,DNS服务器指定某个subdomain.domain.com的请求必须转到domain.com的IP地址,并且domain.com上的web服务器会进一步处理该请求并显示所需的子域页面。
我不完全清楚(例如Apache)服务器是如何做到的。 据我所知,可以在vhosts.conf文件中指定包含子域数据的文件夹。 就像是:
<VirtualHost *> ServerName www.domain.com DocumentRoot /home/httpd/htdocs/ </VirtualHost> <VirtualHost *> ServerName subdomain.domain.com DocumentRoot /home/httpd/htdocs/subdomain/ </VirtualHost>
也可以在.htaccess文件中redirect条目
rewritecond %{http_host} ^subdomain.domain.com [nc] rewriterule ^(.*)$ http://www.domain.com/subdomain/ [r=301,nc]
然而在这种情况下,用户被定向到包含子域数据的目录,但是用户被“取出”子域。
我想知道 – 如何,当去到subdomain.domain.com subdomain.domain.com ,地址的开始仍然可见在浏览器的地址栏?
可以通过.htaccess文件中的替代条目来完成吗?
如果在vhosts.conf文件中指定了VirtualHost条目,是否意味着必须指定新的用户帐户才能访问此目录?
HTTP / 1.1要求每个主机都包含被请求的服务器的名称。 因此,对http://www.foo.bar.com的请求将首先进行DNS查找,以查看与www.foo.bar.com关联的服务器。 这可能是指向Web服务器的CNAME条目,也许这个相同的Web服务器为http://courses.cs.bar.com提供内容。 这两个地址都在同一个地方,但是Apache可以区分这两个地址,因为它可以看到浏览器在每次请求时都尝试去哪里。
因此,假设DNS将www.domain.com和subdomain.domain.comstream量发送到同一台服务器,该服务器具有不同的configuration,并且可以提供不同的文档。
在一台主机上使用两台虚拟主机在function上等同于拥有两台独立的物理networking服务器。
不需要指定新的用户帐户进行访问。 所有的文件都是由运行apache的用户访问的,通常是apache用户。 该用户必须能够读取它所服务的所有文件,在这两个文档根目录中。
重写规则在虚拟主机处理之前生效。 在这种情况下,Web服务器重写URL以将客户端更改为指向不同的URL。 mod_rewrite也发送301到浏览器,告诉它的内容生活在别的地方。 根据HTTP规范,任何接收此代码的浏览器都必须从给定的HTTP地址切换到请求(replace浏览器地址行中的旧地址)。
这就像用户每次进入子域一样,给他们一个页面,说“这是别的地方”,并要求他们在浏览器中input一个新的地址。
由于VirtualHost条目是主服务器configuration的一部分,而不是特定于目录的选项,因此它们不能放入.htaccess文件中。
要回答你关于两个子域configuration的问题:
<VirtualHost *> ServerName www.domain.com DocumentRoot /public_html </VirtualHost> <VirtualHost *> ServerName subdomain.domain.com DocumentRoot /public_html/subdomain </VirtualHost>
确定这是你想要的; 如果用户将“子域名”附加到URL,所有“子域名”的内容都可以从“www”地址访问。
对于第二个问题,可以使用ServerAlias来完成。 这基本上意味着有一个虚拟服务器,但它可以被多个名称访问。
<VirtualHost *> ServerName www.domain.com ServerAlias subdomain.domain.com DocumentRoot /public_html </VirtualHost>
至于最后,如果你有权修改DNS和你的主Apacheconfiguration,你不需要其他任何东西。 我不知道你的具体托pipe服务提供商是如何工作的; 如果你不能访问这两个东西,你可能需要和他们一起工作。