Mod_rewrite基于IP并使用链接文件夹名称

时间:2015-07-25 15:37:13

标签: apache .htaccess mod-rewrite rewrite rewritemap

我想使用.htaccess根据访问者的IP地址重写到文件夹。我有一个带有相关用户名的IP地址列表(在文本文件中)。用户名也是文件夹名称。

  • 192.168.0.2 - John
  • 192.168.0.3 - Ben

示例:当John(IP ..0.2)访问www.domain.com时,他必须看到文件夹/ John的内容

因为用户名-IP绑定将在PHP中进行,所以我更喜欢使用RewriteMap,因此我可以生成.txt文件。

不幸的是,我不得不知道从哪里开始。基于用户IP重写不是问题,问题是找到链接的用户名。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,但我想知道为什么因为有许多现有模块已经提供用户目录和身份验证,无论如何你可以:

# Call an external program each time
RewriteMap userDir "prg:/srv/www/cgi-bin/ipToUserDirectoryMapper.php"

RewriteCond %{REQUEST_URI}  !somePatternCommonToAllAlreadyRewrittenRequests
RewriteRule .*  /${userDir:%{REMOTE_ADDR}}%{REQUEST_URI} [L,R]

其中: ipToUserDirectoryMapper.php 将IP地址作为参数并返回一个目录,默认为未知IP。

交替地,映射是在txt文件中:

# Use a static remap file
RewriteMap  userDirMap "txt:/srv/www/ipToDirectoryMap.txt"

RewriteCond %{REQUEST_URI}  !somePatternCommonToAllAlreadyRewrittenRequests
RewriteRule ^(.*)  /${userDirMap:%{REMOTE_ADDR}|someDefaultUser}%{REQUEST_URI}  [L,R]

注意:您的目录名称需要一个公共元素,或者您需要为用户目录设置CGI参数或环境变量(SetEnvIf Request_URI" ^ / John& #34;已经重写),以防止重定向循环,例如。调用你的目录UserJohn,UserBen而不是 somePatternCommonToAllAlreadyRewrittenRequests

 **!^/User[a-zA-Z0-9-_]+**