Printed May 24, 2013 from B&T's Tips & Scripts
http://tips-scripts.com
Domain and subdomain pointing
Stop here!
If you want to do domain pointing, before you even start with htaccess code, make sure your pointed domain name resolves to your main domain name default page.
Many people think they have trouble with their htaccess code only to find the domain name is not properly pointed to their main domain in the first place.
So make sure your pointed domain name works, resolving to your default page, before going any further.
If you are doing subdomain pointing make sure that wildcard subdomains are enabled in your dns.
You can verify this by using any subdomain name and seeing if it resolves to your main domain default page.
The examples below assume that your root public directory (where you would put this .htaccess file) is htdocs, which is the default setup for Apache.
If your setup is different, then you may need to adjust the examples accordingly.
This approach has you code the first part of the domain or subdomain name and the associated subdirectory in your .htaccess file.
For example:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/subdirectory/
RewriteCond %{HTTP_HOST} ^(www\.)?name\.
RewriteRule ^(.*)$ subdirectory/$1 [L]
Note the second line has name, NOT name.com.
And note that there are some restrictions when using this method.
- Domains and subdomains are treated exactly the same. The pointing is
based on the first argument of the url. In this example name.com (as a pointed domain
name) or name.domain.com (as a pointed subdomain) ends up at htdocs/subdirectory.
This is particularly useful in certain situations, for example if you want the subdomains of more than one domain to point to the same place, or if you have both a .com and a .net domain name
you want pointed to the same place.
- You must create a subdirectory under htdocs for every domain and subdomain
you wish to be pointed. The subdirectory name is then coded into the
htaccess file.
- The first argument in the url must be
unique. You cannot have two domains or subdomains with the same name.
sub.domain1.com and sub.domain2.com will both go to the same subdirectory.
- It defaults to allow www. as a prefix on any domain or subdomain.
-
The root directory with this htaccess file is the "drop through" for any domain or subdomain not found.
You may want to put an error not found page as the default page. Or, you
could choose to have your main website be the "drop through" and
just leave that one in the root.
There is also a simplified variation of this method that can be used in less complex situations where you are simply pointing a domain name and want ALL subdomains of that one domain
to be pointed to a specific directory. In this example name.com and any subdomain (including www) of that domain would be pointed to htdocs/subdirectory:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/subdirectory/
RewriteCond %{HTTP_HOST} name.com$
RewriteRule ^(.*)$ subdirectory/$1 [L]
In both examples, the htacess code works this way.
The first two lines set up the Apache server rewrite process.
Then you have two RewriteCond statements and a RewriteRule for EACH domain or subdomain you wish to point.
There is a second approach where pointed domains and subdomains become automatic, meaning no specific code is required for each pointer.
While this method is much easier to use and does not need to be modified when
adding more domains or subdomains, note that there are some restrictions when using this method.
- Domains and subdomains are treated exactly the same. The pointing is
based on the first argument of the url (except www if used).
- You must create a subdirectory under htdocs with a - at the front for every domain and subdomain
you wish to be pointed. The directory name must
match the first argument in the url (except for www if used). For example,
domain.com would have htdocs/-domain and
sub.domain.com would have
htdocs/-sub and domain2.com would have
htdocs/-domain2 etc.
- The first argument in the url, and therefore the directory name, must be
unique. You cannot have two subdomains with the same name.
sub.domain1.com and sub.domain2.com will both go to the directory htdocs/-sub
- You cannot have any other directory names that start with a - character.
- It defaults to allow www. as a prefix on any domain or subdomain.
-
The htdocs directory is the "drop through" for any domain or subdomain not found.
You may want to put an error not found page as the default page. Or, you
could choose to have your main website be the "drop through" and
just leave that one in htdocs.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/-
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)
RewriteCond %{DOCUMENT_ROOT}/-%2 -d
RewriteRule ^(.*)$ -%2/$1 [L]
The htaccess code works this way. The first two lines set up the
Apache server rewrite process. The first RewriteCond allows www. to be a
prefix and captures the request name. The second RewriteCond checks for the existence of a subdirectory
with the request name. The third RewriteCond ensures we are
not caught in a looping operation. The RewriteRule rewrites the request
with the subdirectory name (which was already verified).
You can get more information on the Apache Module mod_rewrite here.