Can Apache rewrite a request’s Host header based on the URL

apache-2.2mod-rewrite

Apache is a reverse-proxy to my app. A client requests http://cdn.example.com/foo/images/logo.png:

GET /foo/images/logo.png HTTP/1.1
Host: cdn.example.com

I want Apache to modify the request so that the app on the other side of the reverse proxy receives it in the format http://foo.example.com/images/logo.png:

GET /images/logo.png HTTP/1.1
Host: foo.example.com

Rewriting the URL is easy, but I haven't found a way to modify the Host header with a value extracted from the URL. Is this possible?

Best Answer

Yes, you can change headers based on URIs. It's ugly though -- This is the only way I know of to do it:

  1. Use SetEnvIF to set an environment variable if the URI matches what you want to rewrite.

  2. Use mod_headers' RequestHeader directive to reset the appropriate Request Header (Host:) if that environment variable is set.