Jun 03

Using ISAPI_Rewrite

Whoa! That’s a lot of steps to create all the subdomains I want. Is there an easier way? Well there is an alternative way. Let’s get started first then we’ll run the comparisons.

Setup DNS Server

Add the following entry into your DNS server and change the domain and IP address accordingly.

*.example.com IN A 1.2.3.4

Setup the Web Server

We are assuming that you already have a web site created for your main site: www.example.com. So let’s just double check to make sure it will be able to accept all variations of the subdomains.

  • Open IIS Management Console and select your web site.
  • Right click on it and select Properties.
  • Click on Web Site tab.
  • Click on Advanced button.
  • Make sure there is one entry under the Multiple identities for this Web Site with Host Header Name field blank. This entry will intercept all requests that comes to this IP address.
  • Make sure the IP address is only used by this web site.

Setup httpd.ini for ISAPI_Rewrite

Add the following code to your httpd.ini in the web root. Make sure they are in the correct order.

# Convert http://example.com to http://www.example.com/
RewriteCond Host: ^example.com
RewriteRule (.*) http\://www\.example.com$1 [I,RP]

# Assuming we have limited number of shared folders.
# We will execute them accordingly regardless of the subdomain.
# Example: http://sub1.example.com/img/logo.jpg -> /img/logo.jpg
# Example: http://www.example.com/img/logo.jpg -> /img/logo.jpg
RewriteRule (/css/.*) $1 [I,O,L]
RewriteRule (/js/.*) $1 [I,O,L]
RewriteRule (/img/.*) $1 [I,O,L]

#Redirect all other subdirectories not matching
#to the list above as subdomains
#example: www.example.com\sub1 -> sub1.example.com
RewriteCond Host: www\.highspeed\.com
RewriteRule /(\w*)/(.*) http\://$1\.example\.com$2 [I,RP]

# If the web site starts with www then point the file to the root folder
# If you specifically created a folder /www/ then you can comment out this section.
RewriteCond Host: (?:www\.)example.com
RewriteRule (.*) $1 [I,O,L]

# Any web site starts other than www will be re-mapped to /<subdomain>/
# Example: http://sub1.example.com/default.asp -> /sub1/default.asp
# Note: if the folder does not exists, then the user will get a 404 error automatically.
RewriteCond Host: (.*)\.example.com
RewriteRule (.*) /$1$2 [I,O,L]

#Fix missing slash char on folders
#This has to be at the end because if invalid dir exists,
#we should show 404 first
RewriteCond Host: (.*)
RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [I,RP]

Jun 03

Solution 1: Create Multiple IIS Web Sites

Setup DNS Server

You have two options. Since you probably have a limited number of subdomains to manage, you can either list them out individually or just use a wildcard.

Wildcard method: Add the following entry into your DNS server and change the domain and IP address accordingly.

*.example.com IN A 1.2.3.4

Declare manually: Add an entry for each of the subdomains.

sub1.example.com IN A 1.2.3.4
sub2.example.com IN A 1.2.3.4
sub3.example.com IN A 1.2.3.4

Setup the Web Server

First make sure you have created a root directory for each of the subdomains, as if you are working with a new web site. Your directory might look like the following:

d:\inetpub\wwwroot\example.com\sub1\
d:\inetpub\wwwroot\example.com\sub2\
d:\inetpub\wwwroot\example.com\sub3\
d:\inetpub\wwwroot\example.com\js\
d:\inetpub\wwwroot\example.com\css\
d:\inetpub\wwwroot\example.com\img\

Next, we create a web site for each of the subdomains. Let’s create the first one and you can repeat this for all others.

  • Open IIS Management Console.
  • Click on the Web Sites folder and select New : Web Site.
  • Click on Next to continue.
  • Enter the description for your site then click Next. An example would be: sub1.example.com.
  • On the IP Address and Port Setting, enter sub1.example.com into the Host header for this Web site field.
  • On the next page, enter the path d:\inetpub\wwwroot\example.com\sub1\.
  • On the next page, select your options click Next and you’re done.

Now here’s the fun part. Since you have created a new site for each subdomain, but there are files that are shared across them, such as javascript, style sheets, and images. What you could do is to create a virtual directory to link them to each of the web sites. Here’s how you do it.

  • Right click on the subdomain you have just created in IIS Management Console and select New : Virtual Directory.
  • As an example we’ll share the style sheet folder (css). Click on Next and enter css in the Alias field.
  • Enter the path d:\inetpub\wwwroot\example.com\css\ into the Path field and click on Next.
  • Specify the permission on the next page and you’re done.

Solution 1: Summary

What we have accomplished here is we have separated your web site into multiple subdomains, while still keeping only one copy of the shared files across them.