2010-11-30 7 views

Répondre

4

Si vous utilisez un serveur web apache et un fedora linux, vous devez faire les choses suivantes

Dans votre DNS, ajoutez une entrée générique. Supposons que votre nom de domaine est demo.com l'entrée dns comme

*.demo.com IN A 192.168.1.100 

Remplacez l'ip par votre ip.

Puis n'importe quoi.demo.com viendra à votre serveur.

Nous devons configurer apache pour gérer le sous-domaine.

Pour chaque sous-domaine, nous devons

  • créer un document dossier racine
  • créer un fichier hôte virtuel et
  • restart apache

Le php suivant est conforme à ce qui précède idée.

<?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(); 
    ?> 

Vous devez exécuter ce script en tant qu'utilisateur root. Dans le fichier de configuration de l'hôte virtuel, vous pouvez ajouter plus d'options. Vous pouvez également vérifier la réponse à une question similar question.

Espérons que cela aide.

0

Vous pouvez réellement utiliser RewriteMap pour cela .. Cela vous permettrait également de mapper des noms de domaine (au cas où vous voudriez vous y connecter également).

Quelque chose comme cela devrait fonctionner -

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

Maintenant, vous pouvez utiliser PHP ou quoi que ce soit pour créer ce fichier domain.map qui suivre le format -

<domain name> <targeted path on the server> 

Domaine/sous-domaine et la cible chemin sur le serveur.

Ainsi par exemple.

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

Vous n'avez plus qu'à pointer example.com vers votre serveur!

Cette méthode vous permet de conserver le nom du dossier subdmain indépendant du nom du sous-domaine (dépend entièrement de votre cas d'utilisation).