[mdlug] Apache rewrite not working

Michael ORourke mrorourke at earthlink.net
Sun May 1 10:50:57 EDT 2011


>>  On April 29, 2011 8:45 , "Michael ORourke" <mrorourke at earthlink.net> 
>> wrote:
>>      ServerName www.example.com
>>      ServerAlias www.newsite.com
>>      RewriteEngine on
>>      RewriteCond %{HTTP_HOST} ^example\.com [OR]
>>      RewriteCond %(HTTP_HOST) ^www\.newsite\.com [OR]
>>      RewriteCond %(HTTP_HOST) ^newsite\.com
>>      RewriteRule ^(.*)$ http://www.example.com [R=permanent,L]
>>
>> The DNS records for both the domains point to the same public address.
>> Site Newsite should redirect to www.example.com
>> The first rule for adding www. to example.com does work but neither of 
>> the
>> newsite rules does.
>> I have the same format working for a different site and different virtual
>> host, but the redirect for www.newsite.com does not work.
>
> First, you have parentheses instead of curly brackets around HTTP_HOST in 
> the second and third RewriteCond lines.  Fix this.
>
> Also note that HTTP_HOST is the value of the Host header in the HTTP 
> request, and that this will not be set by web browsers or other clients 
> using HTTP 1.0; only by clients using HTTP 1.1 or above.  The only good 
> way around this that I know of is to use by-IP virtual hosts for each 
> separate fully qualified domain name that a client might use to access 
> your web server.  But you can skip this if you know for sure that no 
> client will use HTTP 1.0 or if you're OK with those clients not being 
> redirected and always remember that this can happen.
>
> Next, try getting rid of the regular expression pattern matching and do 
> string matching instead; this is simpler and may be more reliable:
>
>     RewriteCond %{HTTP_HOST} =example.com [OR]
>     RewriteCond %{HTTP_HOST} =www.newsite.com [OR]
>     RewriteCond %{HTTP_HOST} =newsite.com
>     RewriteRule . http://www.example.com [R=permanent,L]
>
>
> If that does not work, use the RewriteLog directive to enable logging of 
> what mod_rewrite is doing, and add a RewriteLogLevel directive that sets 
> the logging level to 9.  Then try one of the requests that are not being 
> properly rewritten, and see if the reason is obvious from the rewrite log 
> messages; if not, post the messages here so we can take a look at them.
>
> (Note that I've changed the pattern for the RewriteRule above to something 
> shorter and more efficient that also avoids the overhead of setting up a 
> capture, since you're not using $1 in the substitution part of the rule.)
>
> I hope this helps.
>
> --
>   Mark Montague
>   mark at catseye.org

It's amazing, Apache rewrite rules don't work when you have the wrong 
syntax!  ;-)
Once I replaced the parenthesis with curly braces, things were working once 
again.
Thanks for catching that.

Note to self... increase terminal font size and triple check rewrite syntax.

Thanks,
Mike





More information about the mdlug mailing list