Apache ProxyPass (mod_proxy) – excluir un subdirectorio o path

En esta entrada vamos a explicar cómo excluir un determinado subdirectorio o ruta cuando ya hemos configurado un proxy inverso en Apache (módulo mod_proxy) que por defecto incluye esa URL. Un ejemplo para verlo más claro:

[...]
ServerName           foo.com
[...]
ProxyPass            /    http://localhost:4789
ProxyPassReverse     /    http://localhost:4789
[...]

La configuración especificada en el ejemplo anterior iría normalmente dentro de un virtualhost de Apache, ya sea en httpd.conf o en otro fichero de configuración mediante include. Básicamente, indica que toda petición que vaya dirigida al raíz (/) de foo.com será redirigida a http://localhost:4789.

¿Qué sucede si quiero que esto sea así a excepción de para la URL http://foo.com/bar? En ese caso, hay que excluir de forma explícita ese path para que no sea redirigido a través del proxy inverso del siguiente modo:

[...]
ServerName           foo.com
[...]
ProxyPass            /bar/ !
ProxyPass            /    http://localhost:4789
ProxyPassReverse     /    http://localhost:4789
[...]

Al especificar la ruta seguida de ! se indica explicitamente que esa URL no será manejada por las directivas de proxy inverso.