Первое, информация о конкретных серверах берется из (распределенных) внешних массивов содержащих информацию о том, где находятся наши пользователи, группы и ресурсы. Имеем такую форму:
user1 server_of_user1
user2 server_of_user2
: :
Мы помещаем эти записи в файлы map.xxx-to-host
. Второе, мы должны информировать все наши серверы перенаправлять URL вида
/u/user/anypath
/g/group/anypath
/e/entity/anypath
на
http://physical-host/u/user/anypath
http://physical-host/g/group/anypath
http://physical-host/e/entity/anypath
если URL не находится на каком-либо локальном сервере. Следующий набор правил делает это для нас при помощи файлов c ассоциативными массивами для преобразований (примем что server0 — это сервер, который будет использован по-умолчанию, если в массиве нет записи для какого-либо пользователя):
RewriteEngine on
RewriteMap user-to-host txt:/path/to/map.user-to-host
RewriteMap group-to-host txt:/path/to/map.group-to-host
RewriteMap entity-to-host txt:/path/to/map.entity-to-host
RewriteRule ^/u/([^/]+)/?(.*) http://${user-to-host:$1|server0}/u/$1/$2
RewriteRule ^/g/([^/]+)/?(.*) http://${group-to-host:$1|server0}/g/$1/$2
RewriteRule ^/e/([^/]+)/?(.*) http://${entity-to-host:$1|server0}/e/$1/$2
RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\