Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating subdomains on the fly

When one signs up for Blogger or WordPress, one gets their very own sub-domain that works instantly. How can I achieve the same, given that I have my own VPS/VDS/Dedicated server?

like image 389
Viet Avatar asked Feb 04 '23 06:02

Viet


2 Answers

In a nutshell:

  1. Create a wildcard domain in DNS (i.e., resolving whatever.yourdomain.example returns your IP),
  2. create a default virtual host in your web server and
  3. check the URL in your application.

How to do this depends on what technology you use. Let me give you some examples:

  1. How to set up a wildcard domain in BIND and in Windows Server DNS.
  2. To create a default virtual host, you just need to create a web server without a host entry in IIS. In Apache, the first virtual host listed in the configuration file becomes the default host.
  3. Here, you can either (a) rewrite the URL depending on the domain (i.e., converting the subdomain into a parameter in the URL, example for ASP.NET, examples for Apache with mod_rewrite: Link1, Link2), or (b) just have a look at the host part of the URL (e.g. Request.Url in ASP.NET).

Addition by bortzmeyer (sorry for overwriting your edit, there was an edit conflict):

The syntax for a wildcard, in the usual DNS zone file format (described in RFC 1035 and implemented in BIND, nsd and may be others) is with a star:

 *   IN    A   198.51.100.3
like image 112
Heinzi Avatar answered Feb 08 '23 14:02

Heinzi


For those, who are laymen to all this A and CNAME things, there's a very simple solution and works with Shared Hosting:

Simply go to your cpanel and add a subdomain with *

For example, if your domain is called abc.com, you can add * and select/enter the sub-directory as a root to this. When you save, it will add *.abc.com in your sub-domains table and will add all necessary A records to your zonefile.

When you hit "any".abc.com in your browser, server will land you to the specified location (the sub-directory you mentioned).

Additionally, to handle all (any) sub-domain for specific redirection, you can use a .htaccess in that sub-directory to handle all incoming subdomain requests.

A working .htaccess example is as follows:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(^.*)\.abc\.com
RewriteRule (.*)  handler.php?user=%1&%{QUERY_STRING}

</IfModule>

The handler.php (code below) simply displays a welcome message with sub-domain name and all query string in the URL:

$user = $_REQUEST["user"];
print_r($_REQUEST);
echo "Welcome {$user}";

Hope this helps.

like image 27
Waqas Hasan Avatar answered Feb 08 '23 16:02

Waqas Hasan