![Apache: redirige sin cambiar la URL en el navegador del usuario](https://rvso.com/image/760986/Apache%3A%20redirige%20sin%20cambiar%20la%20URL%20en%20el%20navegador%20del%20usuario.png)
¿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_usuarios
la 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 P
bandera 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 RewriteRule
directiva, 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 .htaccess
archivo (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 RewriteRule
directiva.
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 $1
una referencia al primer grupo capturado (es decir, elnombre de usuario) en elRewriteRule
patrón.
Como se mencionó anteriormente, he incluido la L
bandera 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.