IP-based redirection using mod_rewrite

IP-based redirection using mod_rewrite - .htaccess files are extremely useful in many cases for users who either do not have root permissions or for users who simply aren't comfortable in making changes in their web server's configuration file. Trying to debug .htaccess not working isn't always the easiest thing to do, however, hopefully by checking the discuss below mentioned about htaccess, redirects, mod-rewrite, apache2, .htaccess common problems as well as the troubleshooting tips, you'll have a better grasp on what you may have to modify to get your .htaccess file running smoothly.Problem :


I'm running a small VPN server where each user has his own static IP.

I set up an Apache server in order to host files for each of them and instead of using a new registration system, I wanted to take advantage of those static IPs.



So I thought I could use mod_rewrite to achieve that and wrote this snippet:



RewriteEngine On
RewriteBase /
RewriteCond %REMOTE_ADDR 10.8.0.11
RewriteRule ^(.*)$ user1/ [L]


If user1, who has the IP 10.8.0.11, tries to reach http://10.8.0.1/, he's properly redirected to the appropriate subfolder http://10.8.0.1/user1/.

If user1 tries to reach any other subfolder, he's also properly redirected to his own subfolder.



Though there are some issues with this setup:




  • if there's an index file on that folder, I end up with an internal error

  • if there's any other file, I cannot download/run it



Is there any way I can overcome this?

I mean, locking a user on a specific subfolder based on his IP and allowing him to browse that folder (viewing a website, retrieving files...).


Solution :

I'm sure there must be a more elegant/efficient way of writing this, but this should work to do what you require:



RewriteEngine On
RewriteBase /

# Restrict users from IP address 10.8.0.11 to user1 sub-folder
RewriteCond %REMOTE_ADDR 10.8.0.11
RewriteCond %REQUEST_URI !(user1)
RewriteRule ^(.*)$ /user1/$1 [L,R=301]

# Restrict users from IP address 10.8.0.12 to user2 sub-folder
RewriteCond %REMOTE_ADDR 10.8.0.12
RewriteCond %REQUEST_URI !(user2)
RewriteRule ^(.*)$ /user2/$1 [L,R=301]

Additionally, if you would like to do some further testing, give the htaccess tester tool a try. It allows you to specify a certain URL as well as the rules you would like to include and then shows which rules were tested, which ones met the criteria, and which ones were executed.

Comments

Popular posts from this blog

Rewrite in Mediawiki, remove index.php, .htaccess

.htaccess rewrite wildcard folder paths from host

Using .htaccess to set a cookie and 301 redirect