Bill
Bill

Reputation: 2349

apache mod rewrite for subdomain

On my webserver, I have one website located at example.com/site (in /var/www/site).

I want it to be accessed through site.example.com, and I'm aware I need to use mod-rewrite to enable this.

Is there a concise snippet I can use to do this? I need to make it extensible so other sites can be accessed this way as well. Thanks in advance.

Upvotes: 0

Views: 249

Answers (2)

Jon Lin
Jon Lin

Reputation: 143946

If this is a matter of one specific subdomain: site, then you should explicitly rewrite just that one subdomain:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule ^(.*)$ /site/$1 [L]

The second condition prevents an internal rewrite loop and making your URI look like /site/site/site/site/site/site/ etc...

This would go in your .htaccess file in your document root, /var/www/

If you really want to arbitrarily redirect any subdomain, you can try this:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]*)\.example\.com$ [NC]
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)[^:]*:\1 [NC]
RewriteRule ^(.*)$ /%1/$1 [L]

Here, the second condition serves the same purpose, it tries to make sure the request URI doesn't start with the subdomain match from the host. See https://stackoverflow.com/a/11508430/851273 for a better explanation.

Upvotes: 2

Simon Jensen
Simon Jensen

Reputation: 73

First you need to configure your server to accept any subdomain for your domain example.com and redirect it to your virtual host that as well has to accept any subdomain. After that, you can use the following rule to rewrite that subdomain internally to a folder with the same name:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteRule ^ %1%{REQUEST_URI} [L]

Upvotes: 1

Related Questions