![Apache - Weiterleitung ohne Änderung der URL im Browser des Benutzers](https://rvso.com/image/760986/Apache%20-%20Weiterleitung%20ohne%20%C3%84nderung%20der%20URL%20im%20Browser%20des%20Benutzers.png)
Gibt es eine Möglichkeit, mit mod_rewrite umzuleiten, ohne die URL im Browser des Benutzers zu ändern?
[P]
Ich habe am Ende eine Lösung mit gesehen RewriteRule
, aber das funktioniert bei mir nicht.
Was ich möchte:
https://my-server.com/propostas/billy.joe
< ---> internally redirect to
https://my-server.com/subdir/propostas_usuarios/billy.joe
Was ich habe:
<LocationMatch "/propostas/(?<username>[^/]+)">
RewriteEngine On
RewriteRule ^/([^/]+)(.*) /subdir/propostas_usuarios/%{env:MATCH_USERNAME}
</LocationMatch>
Das ist, was derzeit funktioniert. Aber nach der Umleitung kann ich /subdir/propostas_usuarios
die neue URL sehen.
Ich habe versucht, [P]
es folgendermaßen zu verwenden:
RewriteRule (.*) https://%{SERVER_NAME}/hpe/propostas_usuarios/%{env:MATCH_USERNAME} [P]
Aber das gibt mir diese Fehler:
[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 (*)
Irgendwelche Ideen?
Antwort1
Das P
Flag sendet die Anfrage über mod_proxy – was hier nicht erforderlich zu sein scheint. Sie benötigen lediglich ein internes Umschreiben in ein anderes Unterverzeichnis.
<LocationMatch "/propostas/(?<username>[^/]+)"> RewriteEngine On RewriteRule ^/([^/]+)(.*) /subdir/propostas_usuarios/%{env:MATCH_USERNAME} </LocationMatch>
Das scheint zu funktionieren – es gibt hier keine externe Umleitung, wie Sie anscheinend bemerkt haben. Allerdings gibt es kein L
(oe END
)-Flag für die RewriteRule
Direktive, sodass die Verarbeitung fortgesetzt wird und es eine spätere Direktive sein kann, die die Umleitung auslöst? (Obwohl externe Umleitungen eigentlichVoralle internen Umschreibungen.)
Wenn Sie auch über eine .htaccess
Datei (oder <Directory>
einen Container) verfügen, werden diese Anweisungen später ebenfalls verarbeitet und können möglicherweise eine Weiterleitung auslösen. (?)
Diese Regel kann auch „vereinfacht“ werden – der Wrapper ist nicht erforderlich <LocationMatch>
, da alles in einer einzigen RewriteRule
Direktive erledigt werden kann.
Zum Beispiel:
RewriteEngine On
RewriteRule ^/propostas/([^/]+)$ /subdir/propostas_usuarios/$1 [L]
Ich habe einen End-of-String-Anker auf den regulären Ausdruck gesetzt, sonst würde er mit einer URL der Form übereinstimmen /propostas/billy.joe/anything
. Dies $1
ist eine Rückreferenz auf die erste erfasste Gruppe (d. h. dieNutzername) imRewriteRule
Muster.
Wie oben erwähnt, habe ich das L
Flag eingefügt, um zu verhindern, dass weitere Anweisungen im aktuellen Kontext verarbeitet werden. Anweisungen in <Directory>
Containern ( und .htaccess
) werden jedoch weiterhin verarbeitet.
Wenn Sie zuvor eine externe Weiterleitung gesehen haben, müssen Sie sicherstellen, dass Ihr Browser-Cache vor dem Test geleert wurde.