Apache: redirige sin cambiar la URL en el navegador del usuario

Apache: redirige sin cambiar la URL en el navegador del usuario

¿Existe alguna forma de redirigir con mod_rewrite sin cambiar la URL en el navegador del usuario?

Vi una solución [P]al final de RewriteRule, pero no me funciona.

Lo que quiero:

https://my-server.com/propostas/billy.joe
   < ---> internally redirect to
https://my-server.com/subdir/propostas_usuarios/billy.joe

Lo que tengo:

  <LocationMatch "/propostas/(?<username>[^/]+)">
  RewriteEngine On
  RewriteRule ^/([^/]+)(.*) /subdir/propostas_usuarios/%{env:MATCH_USERNAME}
  </LocationMatch>

Esto es lo que está funcionando actualmente. Pero después de redirigir, puedo ver /subdir/propostas_usuariosla nueva URL.

He intentado usarlo [P]así:

  RewriteRule (.*) https://%{SERVER_NAME}/hpe/propostas_usuarios/%{env:MATCH_USERNAME} [P]

Pero esto me da estos errores:

[Fri Dec 11 16:02:57.945091 2020] [proxy:debug] [pid 16725:tid 140351293593344] mod_proxy.c(1253): [client 10.0.105.36:52700] AH01143: Running scheme https handler (attempt 0)
[Fri Dec 11 16:02:57.945102 2020] [proxy_ajp:debug] [pid 16725:tid 140351293593344] mod_proxy_ajp.c(744): [client 10.0.105.36:52700] AH00894: declining URL https://my-server.com/subdir/propostas_usuarios/billy.joe
[Fri Dec 11 16:02:57.945124 2020] [proxy_fcgi:debug] [pid 16725:tid 140351293593344] mod_proxy_fcgi.c(1032): [client 10.0.105.36:52700] AH01076: url: https://my-server.com/subdir/propostas_usuarios/billy.joe proxyname: (null) proxyport: 0
[Fri Dec 11 16:02:57.945131 2020] [proxy_fcgi:debug] [pid 16725:tid 140351293593344] mod_proxy_fcgi.c(1035): [client 10.0.105.36:52700] AH01077: declining URL https://my-server.com/subdir/propostas_usuarios/billy.joe
[Fri Dec 11 16:02:57.945149 2020] [proxy:debug] [pid 16725:tid 140351293593344] proxy_util.c(2338): AH00942: HTTPS: has acquired connection for (*)
[Fri Dec 11 16:02:57.945159 2020] [proxy:debug] [pid 16725:tid 140351293593344] proxy_util.c(2393): [client 10.0.105.36:52700] AH00944: connecting https://my-server.com/subdir/propostas_usuarios/billy.joe to my-server.com:443
[Fri Dec 11 16:02:57.946130 2020] [proxy:debug] [pid 16725:tid 140351293593344] proxy_util.c(2616): [client 10.0.105.36:52700] AH00947: connected /subdir/propostas_usuarios/billy.joe to my-server.com:443
[Fri Dec 11 16:02:57.946210 2020] [proxy:debug] [pid 16725:tid 140351293593344] proxy_util.c(3085): AH02824: HTTPS: connection established with 10.30.6.52:443 (*)
[Fri Dec 11 16:02:57.946233 2020] [proxy:error] [pid 16725:tid 140351293593344] AH00961: HTTPS: failed to enable ssl support for 10.30.6.52:443 (my-server.com)
[Fri Dec 11 16:02:57.946236 2020] [proxy:debug] [pid 16725:tid 140351293593344] proxy_util.c(2353): AH00943: HTTPS: has released connection for (*)

¿Algunas ideas?

Respuesta1

La Pbandera envía la solicitud a través de mod_proxy, que no parece ser necesario aquí. Simplemente necesita una reescritura interna en otro subdirectorio.

<LocationMatch "/propostas/(?<username>[^/]+)">
RewriteEngine On
RewriteRule ^/([^/]+)(.*) /subdir/propostas_usuarios/%{env:MATCH_USERNAME}
</LocationMatch>

Parece que esto debería funcionar: aquí no hay ninguna redirección externa, como parece estar observando. Sin embargo, no hay ningún indicador L(oe END) en la RewriteRuledirectiva, por lo que el procesamiento continuará y puede ser una directiva posterior la que desencadene la redirección. (Aunque las redirecciones externas realmente deberían serantescualquier reescritura interna).

Si también tiene un .htaccessarchivo (o <Directory>contenedor), estas directivas también se procesan más adelante y podrían desencadenar una redirección. (?)

Esta regla también se puede "simplificar": no es necesario el <LocationMatch>contenedor, ya que todo se puede hacer en una sola RewriteRuledirectiva.

Por ejemplo:

RewriteEngine On
RewriteRule ^/propostas/([^/]+)$ /subdir/propostas_usuarios/$1 [L]

Puse un ancla de final de cadena en la expresión regular; de lo contrario, coincidiría con una URL del formulario /propostas/billy.joe/anything. Es $1una referencia al primer grupo capturado (es decir, elnombre de usuario) en elRewriteRule patrón.

Como se mencionó anteriormente, he incluido la Lbandera para evitar que se procesen más directivas en el contexto actual. Sin embargo, las directivas en <Directory>contenedores (y .htaccess) aún se procesarán.

Si anteriormente estaba viendo una redirección externa, deberá asegurarse de que se haya borrado la memoria caché de su navegador antes de realizar la prueba.

información relacionada