有几种方法可以做到这一点,但我想知道为什么有许多现有模块已经提供用户目录和身份验证,无论如何你可以:
# 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-_]+**