用户注册时创建子域

时间:2009-12-03 16:16:48

标签: php apache virtualhost

我有一个网站,我希望用户注册以获得自己的子域名。此子域是虚拟的,每个子域使用相同的Web服务器文件。

我使用PHP和Apache,我知道虚拟主机,但我想知道我需要放置vhosts代码。首先,我无法访问httpd.conf。其次,我希望在注册时自动完成。

我读过有关虚拟主机的信息,但没有找到任何可以回答我问题的内容。有没有人可以解释我这一切是如何一起工作的,或者知道我在哪里可以找到答案?

4 个答案:

答案 0 :(得分:7)

你能告诉apache读取额外的.conf文件吗? (传统上,您将vhost存储在httpd-vhosts.conf中)

如果是,请添加以下内容并重新启动您的网络服务器

NameVirtualHost *:80

<VirtualHost *:80>
        DocumentRoot /abs/path/to/webroot
        ServerName   domainname.com
        ServerAlias *.domainname.com
        <Directory /abs/path/to/webroot>
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

然后在php中,您可以通过检查来查看用户请求的子域:

$_SERVER['HTTP_HOST']

即。如果用户请求http://user1.domainname.com/index.php

$ _ SERVER ['HTTP_HOST']将拥有user1.domainname.com

然后你可以爆炸('。',$ _SERVER ['HTTP_HOST'])来检查每个段......等等。

答案 1 :(得分:2)

(灵感来自Janek的评论)

如果您的Apache实例配置为*别名,则无需创建虚拟命名主机 - 您可以通过评估$ _SERVER ['HTTP_HOST']来伪造它。

要确定您的Apache实例是否会处理它,请编辑本地/ etc / hosts文件(或等效的Windows - %SystemRoot%\ system32 \ drivers \ etc \ hosts),以便所需的虚拟名称指向您的服务器。

例如

# An example HOSTS file.
192.168.1.4 testserver testserver.com subdomain.testserver.com secondname.com

这假设192.168.1.4是您的服务器的IP。之后的所有内容都是可以调用服务器的别名。

然后,正如Janek所建议的那样,创建一个echo $_SERVER['HTTP_HOST']页面,以查看它是否正确捕获了名称。如果是这样,那么所需要的只是DNS更改,Apache可以保持不变。

否则无法访问Apache.conf(这意味着你无法访问很多东西),这将很难实现。编程不会 - 但实现将是。

原因如下:

  1. 默认情况下,Apache将提供虚拟主机。但是您确实需要访问服务器的conf目录(通常位于/etc/httpd/conf.d/中),因此您可以创建虚拟主机“include”文件(如果Apache配置已设置为包含它 - 最近的安装应该定)。

  2. 您需要能够循环Apache(重启)。如果没有这个,虚拟主机更改将不会生效。

  3. 您需要能够更改DNS。您可以随时更改本地/ etc / hosts文件 - 但为了让访问者访问您的网站,您需要能够推进DNS更改。 (这可能是瞬间的 - 或者可能需要24小时才能传播)。

  4. 脚本当然可以完成(参见Cpanel和WHM)

答案 2 :(得分:2)

你需要3件事:

1。 为* .yourDomain.com

设置DNS

2。 将ServerAlias指令添加到此域的apache配置:

ServerName www.yourDomain.com
ServerAlias *.yourDomain.com yourDomain.com

还要确保您的apache服务器UseCanonicalName设置为on(这是默认设置)

3。 使用PHP Grep子域名:

  $nameChunks = explode('.', $_SERVER['HTTP_HOST']);
  $subDomainName = $nameChunks[count($nameChunks) - 3];

答案 3 :(得分:1)

首先,您需要设置DNS服务器以解析主IP地址的所有子域,即*.domain.com必须解析为您服务器的IP地址。然后,Web服务器也需要处理所有传入的请求,而不管子域是什么,调用一些PHP脚本。然后,PHP脚本可以简单地从$_SERVER['HTTP_HOST']标头中找出请求的域,并采取相应的行动。

您实际上并不是“在用户注册时创建子域名”。

相关问题