2010-11-30 146 views
0

我使用的是亞馬遜EC2 ....我想要一個腳本,當用戶註冊時創建子域或用戶可以根據需要創建子域的選項..?自動子域創建亞馬遜ec2

任何人都可以提出一個腳本這..最好的PHP ..

感謝

回答

4

如果您使用的是Apache Web服務器和和Fedora Linux,您必須執行以下操作

在你的dns中添加一個通配符條目。假設你的域名是demo.com的dns條目如

*.demo.com IN A 192.168.1.100 

用你的ip替換ip。

然後anything.demo.com會來到您的服務器。

我們必須配置apache來處理子域。

對於我們必須

  • 創建文檔根文件夾
  • 創建虛擬主機文件和
  • 重啓Apache

以下PHP每個子域是符合上述理念。

<?php 
    define('DOMAIN','demo.com'); 
    define('DOCROOT','/home/username/www/'); 
    define('CONF_FOLDER','/etc/httpd/conf.d/'); 

    /* 
    * Function to create conf file in conf.d folder 
    */ 
    function createNewVhostFile($subdomain) { 
     $filename = CONF_FOLDER.$subdomain.'.conf'; 
     $fh   = fopen($filename, 'w') or die("can't open file"); 
     $servername = $subdomain.".".DOMAIN; 
     $docroot = DOCROOT.$subdomain; 

    $virtualhost = <<<HEREDOC 
    <VirtualHost $servername > 
    DocumentRoot $docroot 
    ServerName $servername 
    ServerAlias $servername 
    </VirtualHost> 
    HEREDOC; 

     fwrite($fh, $virtualhost); 
     fclose($fh); 
    } 

    /* 
    * Function to restart apache 
    */ 
    function restartApache() { 
     $configtest = `apachectl configtest 2>&1`; 
     echo $configtest; 
     if(strtolower(trim($configtest)) == 'syntax ok'){ 
      $restart = `/etc/init.d/httpd restart 2>&1`; 
      echo $restart; 
     } 
    } 

    /* 
    * Create document root folder. 
    */ 
    function createDocRoot($subdomain){ 
     $docroot = DOCROOT.$subdomain; 
     if(is_dir($subdomain)){ 
      echo "Document root allready exists."; 
     }else{ 
      mkdir($docroot,644); 
     } 
    } 

    $subdomain = "sub"; 
    createDocRoot($subdomain); 
    createNewVhostFile($subdomain); 
    restartApache(); 
    ?> 

您必須以root用戶身份運行此腳本。在虛擬主機配置文件中,您可以添加更多選項。您也可以檢查similar question問題的答案。

希望有所幫助。

0

你實際上可以利用RewriteMap。它可以讓你映射域名(以及你想分支出來的情況)。

像這樣的東西應該工作 -

RewriteMap lowercase int:tolower 
RewriteMap domainname txt:/var/conf/domain.map 
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ 
RewriteCond ${domainname:%1} ^(/.*)$ 
RewriteRule ^/(.*)$ %1/$1 [L,NC,QSA] 

現在你可以使用PHP或任何創造條件,按照這個格式文件domain.map -

<domain name> <targeted path on the server> 

域/子域和目標服務器上的路徑。

因此,例如。

example.com /myvirtualhostingserver/examplesite 
subdomain.demo.com /myvirtualhostingserver/subdomain 

現在你只需要將example.com指向你的服務器!

此方法允許您保持子域文件夾的名稱與子域的名稱無關(完全取決於您的用例)。