动态子域PHP

时间:2010-10-20 09:50:53

标签: php dynamic subdomain cpanel

好的,这可能已经得到了回答,但显然到现在为止我仍然没有找到答案。

您可能会注意到有些网站可能允许用户注册以立即在网站上获得自己的子域名。

例如,该域名是www.domain.com。 如果我将新用户注册为henson,我将在网站上获得我自己的页面,例如:www.henson.domain.com(不确定是否需要www部分) 因此,如果用户打开www.henson.domain.com,它实际上会打开www.domain.com?owner=henson

我可以仅使用htaccess吗?因为我在某处读到这也需要在cpanel中手动创建子域(这会破坏网站的目的)。

哦,网站用平面PHP编码,所以没有MVC框架。如果有人知道如何使用框架(最好是CodeIgniter)轻松地做到这一点,欢迎回答。

感谢您的回答。

4 个答案:

答案 0 :(得分:6)

如果您的服务器上有CPANEL,则有一个XMLAPI允许您通过PHP动态创建子域。

是,动态,非手动。我刚刚花了两天时间(动态创建从子域到电子邮件的所有内容到插件域和sql dbs,用户......一切),cpanel API干净利落地处理它。所以需要一段时间才能搞清楚。

在此页面的第一个链接下载XMLAPI: http://forums.cpanel.net/f42/xml-api-php-class-version-1-0-a-136449.html。文件xmlapi.php是您服务器上唯一需要的文件。

该论坛页面是由非常先进和/或非常hacky编码员编写的半工作示例的噩梦般的墓地,没有明确的起点。

这是PHP中用于添加子域的基本脚本,替换个人值的大写字母。这让我花了很长时间才能做对。祝你好运!接下来的步骤,点击该论坛链接并阅读所有其他API1和API2函数!

include("PATH_TO_THE_DOWNLOADED_xmlapi.php");

    $ip = "YOUR_IP_ADDRESS";
$root_pass = "ROOT_CPANEL_PASSWORD!";


$xmlapi = new xmlapi($ip);
$xmlapi->password_auth("root",$root_pass);

$account = "YOUR_CPANEL_MAIN_ACCNT_NAME";


print $xmlapi->api2_query($account, 'SubDomain','addsubdomain', array(dir=>"public_html/NAME_OF_SUBDOMAIN", domain=>"NAME_OF_SUBDOMAIN", rootdomain=>"MAIN_DOMAIN.com") );

答案 1 :(得分:4)

您无法在htaccess中设置通配符虚拟主机,并将其重写为您需要的URL /目录。有关详细信息,请参阅http://blog.orite.com.au/web_development/2009-01-22/setting-up-wildcard-virtual-hosts-for-web-development-environment/

答案 2 :(得分:0)

您可以解析$_SERVER['SERVER_NAME']以确定使用哪个子域。 www部分实际上是不必要的。这只是一个没有意义的子域。大多数情况下,它只是映射到主域。例如:

if (preg_match('/^(www\.)?(.+)\.your-domain.com$/', $_SERVER['SERVER_NAME'], $matches) && $matches[2] != 'www') {
    $subdomain = $matches[2];
    // your logic goes here
}

答案 3 :(得分:-1)

如果您的服务器配置为允许通配符子域,则可以在.htaccess中实现。我在JustHost中通过创建一个名为*的子域并指定一个名为subdomains的文件夹作为通配符子域的文档根来实现。将其添加到子域名文件夹中的.htaccess文件中:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

最后,为子域创建一个文件夹并放置子域文件。