This is the connection chain here:
1. Client does handshake and transmits HTTP request to BIG-IP. It has a Host header and a Request-URI.
2. HTTP_REQUEST fires.
3. Your irule runs, switches the BIG-IP pool based on the Request-URI and sometimes rewrites the Host header from the client's request.
4. The request is transmitted to the web server.
5. Response from the web server is sent back to the client. Note that the Request-URI and Host header in the request are not part of it.
Be aware here that the client doesn't actually have any idea that the irule is doing this. You have to decide what you want the Host header and Request-URI to contain at the time that the server receives it. A Request-URI must contain *something*, it can't be blank. If it's empty (ie, you visit "http://site.com" instead of "http://site.com/foo"), the browser will send a Request-URI of "/". If you want to manipulate the Request-URI to be "/", you can just set it like:
HTTP::uri "/"