Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am using httpd-2.2.3-22 in RHEL 5.3.

How can I redirect to different document root in Linux based on the URL.

Example:

The document root for testdomain.com is /var/www/vhost/testdomain.com/httpdocs

If the URL is http://web1.testdomain.com then it should point document root to /var/www/vhost/testdomain.com/httpdocs/web1.

If the URL is http://web2.testdomain.com then it should point document root to /var/www/vhost/testdomain.com/httpdocs/web2.

Where web1 and web2 are the two different folders under the parent document root.

Please let me know how to configure apache in this situation ?

Warm Regards

Supratik

share|improve this question

3 Answers 3

You need to configure virtual hosts for your server. There should be configuration files in /etc/httpd/conf on RHEL (maybe /etc/apache2 if you have a customized version). Open httpd.conf and edit the Virtual hosts part, near the bottom.

For instance, you could insert in the file (taken from the link below)

Listen 80

NameVirtualHost *:80

<VirtualHost *:80>
  DocumentRoot /var/www/vhost/testdomain.com/httpdocs/web1
  ServerName web1.testdomain.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/vhost/testdomain.com/httpdocs/web2
  ServerName web2.testdomain.com
</VirtualHost>

If Apache is listening on port 80 (http, default). Then you need to restart Apache ( /etc/init.d/httpd restart OR "apache2 restart" )

Please have a look at Apache Virtual hosts

Re: cannot add virtual hosts

If you cannot add virtual hosts, it is unlikely you can change further the apache and system configurations. The only solutions I see are

  • Use directly http://testdomain.com/web1 (web2)

  • If you do not mind using another port (ie not 80), you could install nginx which is pretty simple to configure, and that will accept a custom configuration file, and configure it to accept connections from port 5000 for instance, (eg http://web1.testdomain.com:5000 ), provided that

    1. RHEL firewall accepts TCP connections from port 5000.
    2. if you are behind a router / firewall that port 5000 is accepted and routed to that web server
    3. that web1 / web2 are resolved via DNS, meaning the subdomains are declared and the IP is set to that web server (or router...)
  • hosts the document files at another web server, and update DNS for testdomain.com to have the web1/2 subdomains resolving to that new web server IP address

share|improve this answer
1  
great answer. upboat. –  troyengel Aug 21 '10 at 14:28

It sounds like you are looking for dynamic virtual hosts. There is a very good article in the Apache documentation on this:

Dynamically Configured Mass Virtual Hosting

There are multiple ways to do this, but the most flexible is probably mod_rewrite. Based on your example you could use the following virtual host configuration:

<VirtualHost *>
        ServerName testdomain.com
        ServerAlias *.testdomain.com

        RewriteEngine on

        RewriteMap lowercase int:tolower

        # check the hostname is right so that the RewriteRule works
        RewriteCond ${lowercase:%{SERVER_NAME}} ^[a-z0-9-]+\.testdomain\.com$

        # concatenate the virtual host name onto the start of the URI
        # the [C] means do the next rewrite on the result of this one
        RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]

        # now create the real file name
        RewriteRule ^([a-z0-9-]+)\.testdomain\.com/(.*) /var/www/vhost/testdomain.com/httpdocs/$1/$2
</VirtualHost>
share|improve this answer

Create two virtual hosts, each with their own DocumentRoot.

share|improve this answer
    
Hi, Thanks for the quick response. I do not have permission to create VirtualHost. There is only one VirtualHost created with server name "testdomain.com" which is pointing to "/var/www/vhost/testdomain.com/httpdocs" Is there are any other ways other than creating VirtualHost ? –  Supratik Aug 21 '10 at 11:26

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.