So stellen Sie Anfragen an eine localhost-Route an eine nicht lokale URL weiter

770
Xgongiveittoya

Ich baue eine lokale Umgebung zum Testen mit WAMP auf.

Die App (eckige App) befindet sich im Verzeichnis / wamp / www / app /. Er stellt Anforderungen an eine andere API, indem er Anforderungen an eine andere Route auf demselben Server sendet. (Speziell für / wamp / www / api / route)

Wir haben einen dev-api-Server, der unter http://api.com vorhanden ist . Wir haben eine weitere Testinstanz der Winkel-App unter http://testapp.com/app/, die Anfragen an http://api.com senden kann, indem sie auf http://testapp.com/api/route zeigt .

Die Art und Weise, dass dies funktioniert in der Testinstanz (nicht lokal) ist, dass wir eine .htaccess - Datei zu haben http://testapp.com/api/route die Anfragen an nimmt http://testapp.com/api/route/ * und schickt sie an http://api.com/ *

Die .htaccess-Datei, die dies ausführt, lautet wie folgt:

<IfModule mod_rewrite.c> RewriteRule (.*) http://api.com/$1 [NC,P] </IfModule> 

Wenn ich diese .htaccess-Datei in mein Verzeichnis / wamp / www / api / route / kopiere, erwarte ich folgendes Verhalten:

Was ich möchte

Die App sendet eine Anfrage an / wamp / www / api / route / stuff / und die .htaccess-Datei in / route / nimmt diese Anfrage und leitet sie an http://api.com/stuff weiter

Was ich bekomme

Die App sendet eine Anfrage an / wamp / www / api / route / stuff / und erhält eine 404 zurück.

Ich habe sichergestellt, dass AllowOverride all eingestellt ist, dass die Umschreibungs-Engine eingeschaltet ist und das Mod-Rewrite aktiviert ist. Ich weiß, dass die .htaccess-Datei gesehen wird, denn wenn ich Müll hineinlege, bekomme ich statt der 404 eine 500, und mein Müll wird in das Protokoll aufgenommen.

Jede Hilfe wäre sehr dankbar! Vielen Dank.


Nach der Hilfe von Purefan habe ich die Protokollierung beim erneuten Schreiben aktiviert. Seit der Aktivierung gab es keine Versuche zum erneuten Schreiben, was darauf schließen lässt, dass die Regel zum erneuten Schreiben der Anforderungen nicht immer ausgeführt wird.

Ich habe jetzt versucht, den Ablauf zu ändern, wie ich die Umschreiberegel nenne.

Ich habe ein Verzeichnis in der httpd-Konfigurationsdatei wie folgt erstellt:

<Directory "c:/wamp64/www/api/route"> Options +FollowSymLinks RewriteEngine on <IfModule mod_rewrite.c> RewriteRule (.*) http://api.com/$1 [NC,P] </IfModule> </Directory> 

Und ich bekomme immer noch dasselbe Verhalten

1
Denken Sie daran, dass Sie die Anforderung basierend auf URIs und nicht auf Ordnern neu schreiben. Wenn der Apache eine Anforderung erhält, wird diese mit einem Satz von Regeln in den VirtualHost-Blöcken abgeglichen. Wenn die Anforderung mit einem der VirtualHost-Blöcke übereinstimmt, verarbeiten die Regeln in diesem Block die Anforderung. Wenn die App eine Anfrage an `localhost` sendet, fängt der Block mit DocumentRoot` / wamp / www / api / route / stuff` möglicherweise ab, aber möglicherweise nicht. Überprüfen Sie Ihre Zugriffsprotokolle, und legen Sie für VirtualHost ein anderes fest, um dies zu erleichtern Purefan vor 7 Jahren 1
Sie können auch das [Umschreibungsprotokoll] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html) aktivieren, um zu sehen, was wie neu geschrieben wird Purefan vor 7 Jahren 1
Das Protokoll zum Umschreiben klingt hilfreich. Ich werde mir das mal ansehen und wieder reinschauen. Danke! Xgongiveittoya vor 7 Jahren 0
Eine Anfrage wird an den richtigen Ort gesendet, so scheint es, aber mit der Umschreib-Anmeldung scheint nichts jemals neu geschrieben zu werden. [03 / Feb / 2017: 11: 02: 01 -0500] "GET / api / route / stuff Xgongiveittoya vor 7 Jahren 0

1 Antwort auf die Frage

1
Xgongiveittoya

Dank Purefan sah ich bei aktiviertem Umschreibungsprotokoll, dass beim Umschreiben versucht wurde, umzuschreiben. Die Anforderung wurde jedoch nicht gesendet.

Wenn ich das P-Flag aus der RewriteRule entfernte, wurde die Anforderung neu geschrieben, aber dann wurden meine Header nicht hinzugefügt, da wir keine Proxyfunktion hatten, was ich tun muss.

Dies führte mich dann zu der Erkenntnis, dass der Proxy nicht korrekt funktionierte, was sofort zu dieser Lösung führte:

Ändern Sie in der Datei httpd.conf

#LoadModule proxy_module modules/mod_proxy.so 

zu

LoadModule proxy_module modules/mod_proxy.so 

TL; DR

Aktivieren Sie mod_proxy, wenn Sie das P-Flag für eine Schreibregel verwenden möchten