Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

apache httpd - RewriteCond SERVER_NAME not equal to SERVER_ADDR

I need to redirect the user if the SERVER_ADDR and SERVER_NAME variables don't match.

I have the following rule in my httpd.conf file:

RewriteEngine on
RewriteCond %{SERVER_NAME} !%{SERVER_ADDR}
RewriteRule .* /myRedirectPage.html [PT]

When SERVER_NAME and SERVER_ADDR don't match, I correctly get redirected. However, I also get redirected even when they are matching.

If I use the following condition it works for both matching and non-matching scenarios: (where 192.168.1.1 is the server IP)

RewriteCond %{SERVER_NAME} !192.168.1.1

To check if the variables matched, I used PHP's $_SERVER['SERVER_NAME'] and $_SERVER['SERVER_ADDR'] variables.

How should I write the RewriteCond so that it does not redirect the user if SERVER_NAME and SERVER_ADDR match?

like image 568
Daniel Avatar asked Jan 30 '13 20:01

Daniel


1 Answers

You can't use server variables on the right side of a RewriteCond, so you are matching against the literal string "%{SERVER_ADDR}", not the variable and thus, since your match is negated ("!"), the rule always matches.

I think you can do something like this, though I've never worked with this particular format myself:

RewriteCond %{SERVER_NAME},%{SERVER_ADDR} ^(.*),\1

The idea is that you're doing two matches - you're matching %{SERVER_NAME} against anything (always matches) and capturing the result, then matching %{SERVER_ADDR} against a backreference to the first match, which is the match of %{SERVER_NAME}.

Again, I haven't used a rule like that myself, just read about it, so it may need some tweaking.

like image 121
David Ravetti Avatar answered Sep 27 '22 20:09

David Ravetti