2012-02-16 14 views
5

¿Es posible redirigir internamente (por lo que url no cambiará en la barra de direcciones) con mod_rewrite a otro puerto en el mismo host? EjApache mod_rewrite internamente a un puerto diferente

http://host.com:8080 -> http://host.com:9999/myapplication/?param=val 
+1

vistazo a 'mod_proxy' .. así como' '(Proxy) flag [P] de RewriteRule. – LazyOne

+0

Gracias, [P] hace todo lo que quiero. – mm1

Respuesta

5

1, Habilitar mod_proxy

LoadModule proxy_module   modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 

2, debe configurar Apache para host virtual:

<VirtualHost *:8080> 
    .... 
    ProxyPass/http://host.com:9999/myapplication/?param=val 
    ProxyPassReverse/http://host.com:9999/myapplication/?param=val 

</VirtualHost> 

3, programa de instalación también VHost en el puerto 9999

Más información aquí:

+0

con respecto al punto 3, ¿puede incluir en su respuesta cómo hacerlo? Gracias – kiltek

0

Elaboración de la solución mod_proxy con [P], la bandera de proxy:

  1. Habilitar módulos mod_proxy y mod_proxy_http:

    a2enmod proxy proxy_http 
    

    sin estos dos habilitado , tú' d más tarde obtiene un estado Prohibido de 300 y el mensaje de error "AH00669: intento de realizar una solicitud remota desde mod_rewrite sin proxy habilitado" en los registros.

  2. Coloque el siguiente en la sección de configuración de host virtual Apache 2 para la expedición anfitrión:

    <VirtualHost *:8080> 
        … 
        RewriteEngine on 
        RewriteCond %{REQUEST_URI} !^$ 
        RewriteCond %{REQUEST_URI} !^/ 
        RewriteRule .*    - [R=400,L] 
    
        RewriteRule (.*) http://host.com:9999/myapplication/$1?param=val [P,L] 
        … 
    </VirtualHost> 
    

    Esto incluye una técnica de Steve Webster para evitar la elaboración URL maliciosa, explained here. Sin embargo, no estoy seguro de cómo abordar la adición del parámetro GET en este contexto.

  3. Restart Apache2:

    sudo service apache2 restart 
    
Cuestiones relacionadas