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...).
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]
Comments
Post a Comment