Redirect all but used subdomains to primary domain using mod_rewrite and CodeIgniter

Trackback - September 21, 2008

I was recently playing with mod_rewrite and wanting a couple of subdomains to act as subdomains, but all others to redirect back to my site without the leading “www”. For example:

www.example.com => example.com
bad.example.com => example.com
api.example.com => api.example.com

Not being a regular expression or mod_rewrite expert (or any resemblance of such), this was a bit of a challenge. But I did it with the help of a mod_rewrite and regular expression cheat sheet, as well as the excellent Apache URL Rewriting Guide.

So here it is for anyone else that could benefit. Just replace the bold parts with your own subdomains (and example with your domain).

Redirect without leading www:
# Redirect deleting leading www to root domain if no specified subdomain is used<br />
RewriteCond %{HTTP_HOST} !^(subdomain1|subdomain2)\.example\.com$ [NC]<br />
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]<br />
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]<br />

Redirect with leading www:
# Redirect adding leading www to root domain if no subdomain is specified<br />
RewriteCond %{HTTP_HOST} !^(subdomain1|subdomain2|www)\.example\.com$ [NC]<br />
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]<br />

If you’re using CodeIgniter and mod_rewrite for pretty URLs, you’ll need to be sure to add these subdomains to the list of directories that can be accessed directly.
# CodeIgniter writing<br />
RewriteCond $1 !^(index\.php|images|robots\.txt|css|user_files|subdomain1|subdomain2)<br />
RewriteRule ^(.*)$ /index.php/$1 [L]<br />

Tags: , , , , , , ,
Categories: Programming, WebDev

Comments


Thanks for this article. It’s a helpful start.


i have an application developed in codeigniter .
if i’ll write domin.com or domain.net i want my application run same application how i map thi


Leave a comment

(required)

(required)