Я бы первое проверил - location, попадаете ли вы в него.
Дальше добавьте ваши переменные в отдельный формат лога - http://nginx.org/ru/docs/http/ngx_http_log_module.html
И смотрите по логам. Если в логах переменные не пустые, то надо разбираться.
Когда совсем плохо, я проверяю через curl. Например в вашем случае, сначала добавлю
rewrite ^ http://$uid_got
А потом вызову из консоли
curl -I somesite.com/test/
В выводе получим
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 26 Mar 2012 14:32:57 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Keep-Alive: timeout=20
Location: http:// ТУТ_ВАШЕ_ЗНАЧЕНИЕ.
Разумеется, этот вариант не подойдет для production. Там можно добавлять заголовки и скать другие варианты.
Советую проверить через rewrite, так как в документации (http://nginx.org/en/docs/http/ngx_http_userid_module.html) эти переменые используються для логов.
Настраивая A/B тестирование, мы не смогли воспользоваться разделением по uid, так как во время подключения эти значения были пустые. Мы разделяли запросы по $remote_addr.
Надеюсь добавил пищи для размышлений. И найдете почему возвращается пустое значение?