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

A few questions:

  1. I have several domains hosted on the same server and I created some ReWrite rules that for specific {REQUEST_URI} gets redirected elsewhere. I copied these rules to each and every Virtual Host. Can I just put these rules in a file and do something like:

    <VirtualHost>

    ServerAdmin webmaster@domain.net
    DocumentRoot /var/www/html/<directory>
    ServerName <domain>
    ServerAlias www.<domain>
    ErrorLog logs/www_<domain>-error_log
    CustomLog logs/www_<domain>-access_log common
    RewriteEngine on
    Include rewrite_rules.conf 
    

  2. How can one create a rule that says if requests come in on specific domains to re-direct to a generic 'For Sale' page. Example, Same they type in www.Allertia.com and I want them to be directed to a For Sale Page.

share|improve this question

2 Answers 2

up vote 2 down vote accepted
  1. Yes, you can do that. The Include directive acts as if the contents of the named file were literally included.

  2. Assuming you want the same "for sale" page to show up for all of the domains:

    <VirtualHost *:80>
        ServerName forsale1.com
        ServerAlias www.forsale1.com
        ServerAlias forsale2.com
        ServerAlias www.forsale2.com
        ...
    
        RewriteEngine on
        RewriteRule .* /var/www/html/path/to/forsale.html
    </VirtualHost>
    

    This will not change the URL that appears in the browser. If you want to perform an HTTP redirect so that the URL in the browser does change, you could add [R] after the rewrite rule. (Or you could use Redirect or RedirectMatch which might be a little quicker, if your server is under high load)

share|improve this answer

You want something that matches against the incoming HTTP Host: header, so a rule such as this will work:

RewriteCond %{http_host} !^www.allertia.com
RewriteRule /  http://example.com/for-sale.html [R,L]

The issue you'll find is that if you say "Rewrite all requests for http://www.alertia.com to http://alertia.com/for-sale.html" you'll get a redirection loop. So redirecting to an un-related domain is simplest.

However if you wish you can create a rule which says "For all requests not equal to /for-sale.html, do the rewrite":

RewriteCond %{http_host} www.allertia.com
RewriteRule !/for-sale.html$  http://www.allertia.com/for-sale.html [R,L]

Obviously you'll need to update the path for the "for sale" page. You'll probably also want to include the rules twice:

share|improve this answer
    
@Steve Kemp - Do I need to create a Virtual Host for Allertia to achieve this or is there a generic way to have ReWrite rules evaluated and acted upon at a non Virtual Host level? I have a number of domains for sale and if I can avoid creating a Virtual Host for each one that would be best! –  JTS Apr 17 '11 at 21:46
    
I was working on the assumption these rules were global - so you didn't need to create a virtual host for them. –  Steve Kemp Apr 17 '11 at 21:49
    
@Steve - Oh, sorry, where do global rules go in httpd.conf? –  JTS Apr 17 '11 at 22:00
    
Add the rules I suggested to your "rewrite_rules.conf" file - the one you demonstrate using already in your config. –  Steve Kemp Apr 17 '11 at 22:37
    
@Steve oh, #1 has nothing to do with #2 above. They are different questions. I don't understand where to put/how to use ReWrite rules without creating a virtual host for each domain. Can you explain? –  JTS Apr 17 '11 at 22:44

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.