2015-07-25 5 views
-1

Я хочу использовать .htaccess для перезаписи в папку на основе IP-адреса посетителей. У меня есть список IP-адресов с соответствующими именами пользователей (в текстовом файле). Именами имен также являются имена папок.Mod_rewrite на основе IP и использовать имя связанной папки

  • 192.168.0.2 - Джон
  • 192.168.0.3 - Бен

Пример: когда Джон (IP ..0.2) идет в www.domain.com, он должен видеть содержимое folder/John

Поскольку привязка имени пользователя-IP будет выполнена на PHP, я предпочитаю использовать RewriteMap, чтобы я мог сгенерировать TXT-файл.

К сожалению, у меня есть идея, с чего начать. Переписывание на основе IP-адресов пользователей не является проблемой, проблема заключается в поиске связанного имени пользователя.

Любая помощь оценена!

ответ

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-адресов.

alternitively, является отображение в текстовом файле:

# 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-_]+**