动态子域PHP

动态子域PHP,php,dynamic,subdomain,cpanel,Php,Dynamic,Subdomain,Cpanel,好吧,这个问题以前可能已经得到了答案,但显然直到现在我还没有找到答案 您可能会注意到,有些网站可能允许用户注册以立即在网站中获得自己的子域 例如,域是www.domain.com。 如果我注册一个新用户为henson,我将在网站上获得自己的页面,例如:www.henson.domain.com(不确定是否需要www部分) 因此,如果用户打开www.henson.domain.com,它实际上会打开www.domain.com?owner=henson 我可以仅使用htaccess进行此操作吗?因

好吧,这个问题以前可能已经得到了答案,但显然直到现在我还没有找到答案

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

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

我可以仅使用htaccess进行此操作吗?因为我在某个地方读到,这也需要在cpanel中手动创建子域(这违背了网站的目的)

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


谢谢您的回答。

您不能在
htaccess
中,必须设置通配符虚拟主机并将其重写到所需的URL/目录。有关更多信息,请参见您可以分析
$\u SERVER['SERVER\u NAME']
以确定使用哪个子域。
www
部分实际上是不必要的。这只是一个没有意义的子域。大多数情况下,它只是简单地映射到主域。例如:

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

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

是的,是动态的,不是手动的。我刚刚花了2天时间在这上面(动态创建从子域到电子邮件帐户到附加域和sql数据库的所有内容,用户……所有内容),cpanel API干净地处理所有内容。所以,花点时间想想

在本页的第一个链接下载XMLAPI: . 服务器上只需要xmlapi.php文件

该论坛页面是一个噩梦般的墓地,由非常先进和/或非常黑客的程序员编写的半工作示例没有明确的起点

下面是PHP中的一个基本脚本,用于添加子域、替换CAP和您的个人值。我花了很长时间才弄清楚。祝你好运!接下来,点击论坛链接,阅读所有其他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") );

这可以在
.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]

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

查看此文件夹查看我的解决方案。如果您可以启用
通配符子域
,则可以在
.htaccess
中实现这一点,但不能在htaccess
中实现。事实上(查找“一个根目录中的多个域”)。我已经读过了,代码如下:VirtualDocumentRoot c:/projects/%1/我把代码放在哪里?在htaccess中?在
httpd.conf
或等效文件中(取决于系统)。好的,如果我在本地主机中尝试的话。那么在托管方面呢?一些网站可以将购买的域名(例如purchased.com)链接到其主要网站。它是如何实现的?@passcod,事实上,你不能。仅当web服务器已设置为将两个域映射到一个目录时,该方法才适用。