Create Subdomain (on the fly) by using PHP

July 8, 2015 3.4k views
DNS DigitalOcean API PHP Perl Linux Commands

i try to find way for user to register in my web. they just need to fill in their name,phone,email address and subdomain that need to create.
this information will store in database and PHP will execute the command to create subdomain. is it possible to do that?
my webhost control panel are not using cpanel , my domain i already point using DO DNS. thanks

1 Answer

Pretty simple, but you'll need to handle the coding part.

  • Create an A record at DO for a wild-card sub-domain (*, for example)
  • In apache, create a wild-card vhost:

Example vhost config (written for CentOS 6.6)

<VirtualHost *:80>
        ServerAlias *
        #### This is where you put your files for that domain: /var/www/vhosts/
        DocumentRoot /var/www/vhosts/
        <Directory /var/www/vhosts/>
                # This section sets directives for the directory.
                # -Indexes <-- That blocks index listings on folders that don't have a default file (index.php/index.html/default.html/etc)
                # FollowSymLinks <-- This will treat symlinks like they should be treated in linux: as folders/files in the folder the symlink resides
                # MultiViews  <--It's easier for you to read this:
                Options -Indexes FollowSymLinks MultiViews
                # AllowOverride All <-- This is required for Apache HTTPD server to read .htaccess files.  It says that you can have a per-folder override for apache directives
                AllowOverride All
        ## Everything to see here. Just the log files.  Good to use for troubleshooting errors.
        CustomLog /var/log/httpd/ combined
        ErrorLog /var/log/httpd/

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
  • In your PHP, have it get the host name:
$user= str_replace("","",$URL);

Now, you have the user. Just have your code configured to show that users page, or a 404 if it doesn't exist.

Have another answer? Share your knowledge.