Apache - Weiterleitung ohne Änderung der URL im Browser des Benutzers

Apache - Weiterleitung ohne Änderung der URL im Browser des Benutzers

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_usuariosdie 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 PFlag 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 RewriteRuleDirektive, 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 .htaccessDatei (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 RewriteRuleDirektive 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 $1ist eine Rückreferenz auf die erste erfasste Gruppe (d. h. dieNutzername) imRewriteRule Muster.

Wie oben erwähnt, habe ich das LFlag 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.

verwandte Informationen