-1

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

  • 192.168.0.2 - 约翰
  • 192.168.0.3 - 本

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

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

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

任何帮助表示赞赏!

4

1 回答 1

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" 已经重写),以防止重定向循环,例如。调用您的目录 UserJohn、UserBen 而不是somePatternCommonToAllAlreadyRewrittenRequests有:

 **!^/User[a-zA-Z0-9-_]+**
于 2015-07-28T14:00:20.277 回答