Josh
Josh

Reputation: 6322

mod_rewrite based on ip

I'd like to implement mod_rewrite to put my site into maintenance. Basically all IP addresses except a handful we specify would be forwarded to a static html page.

Please can someone help with this rule. Also is there a way to turn this on and off easily without editing the htaccess file?

Upvotes: 19

Views: 28652

Answers (5)

leopold
leopold

Reputation: 2061

Optional redirect only specific addresses

Late to the party, and just an add-on if somebody needs it the other way around.
With this approach, you redirect only specific addresses into maintenance then play with the aliases.

ServerName  10.0.1.1
ServerAlias 10.0.2.1
ServerAlias 10.0.3.1

RewriteEngine On
RewriteRule ^(.*)$ http://www.domainname.com/maintenance.html$1 [L,R=301]

Upvotes: 0

8ctopus
8ctopus

Reputation: 3237

Small improvement to Alexander's answer, it's not necessary to use regular expression for the IP address.

RewriteCond %{REMOTE_ADDR} !=10.0.0.1
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]

Upvotes: 5

Alexander  Mikhailov
Alexander Mikhailov

Reputation: 71

I'd like to slightly correct Vinko Vrsalovic's answer.

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteRule ^ /maintenance.html

This rule result will be infinite loop and HTTP server error, because it will be executed on redirection page too. To make it work you should exclude redirection page from the rule. It can be done this way:

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]

Upvotes: 7

Vinko Vrsalovic
Vinko Vrsalovic

Reputation: 340321

You can use the REMOTE_ADDR variable in a RewriteCond

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteRule ^ /maintenance.html

Just change the condition to match the IPs you want, for more than one you can use ^(ip1|ip2|...|ipn)$.

About how to disable the maintenance mode without changing the .htaccess file I think that's not possible short of writing a program that would delete it or otherwise modify it, an easy one would be to rename it.

Upvotes: 21

dusoft
dusoft

Reputation: 11469

you could enable this state and disable it via some admin interface that is able to write to .htaccess (e.g. permissions set to 755 or 777). it would just always find the .htaccess, insert those two lines at the beginning and on disabling maintenance it would delete those two lines, leaving the rest of the file untouched

Upvotes: 0

Related Questions