Ich versuche gerade, eine URL innerhalb einer URL zu platzieren. Zum Beispiel:
http://example.com/url/http%3A%2F%2Fwww.url2.com
Ich bin mir bewusst, dass ich die URL verschlüsseln muss, was ich getan habe, aber jetzt erhalte ich 404
eher einen Fehler vom Server als von meiner App. Ich denke, mein Problem liegt bei Apache und kann mit der AllowEncodedSlashes On
Direktive behoben werden .
Ich habe versucht, die Direktive am Ende der httpd.conf ohne Wirkung zu platzieren, und bin mir nicht sicher, was ich als nächstes tun soll. Platziere ich es an der richtigen Stelle? Wenn ja, hat jemand andere Lösungen?
apache
apache2
apache-config
tommizzle
quelle
quelle
RewriteRule
stattdessen verwendenProxyPass
, sollten Sie einNE
Flag hinzufügen , um eine Dekodierung zu vermeiden.Antworten:
Dieses Problem hängt nicht mit dem Apache-Fehler 35256 zusammen. Es hängt vielmehr mit dem Fehler 46830 zusammen. Die
AllowEncodedSlashes
Einstellung wird nicht von virtuellen Hosts geerbt, und virtuelle Hosts werden in vielen Standard-Apache-Konfigurationen verwendet, z. B. in Ubuntu. Die Problemumgehung besteht darin, dieAllowEncodedSlashes
Einstellung in einem<VirtualHost>
Container (/etc/apache2/sites-available/default
in Ubuntu) hinzuzufügen .Fehler 35256 :
%2F
wird in PATH_INFO dekodiert (DokumentationAllowEncodedSlashes
besagt , dass keine Dekodierung durchgeführt wird)Fehler 46830 : Wenn
AllowEncodedSlashes On
im globalen Kontext festgelegt, wird es nicht von virtuellen Hosts geerbt. Sie müssenAllowEncodedSlashes On
in jedem<VirtalHost>
Container explizit festlegen .In der Dokumentation zum Zusammenführen der verschiedenen Konfigurationsabschnitte heißt es:
quelle
Ich bin immer wieder auf diesen Beitrag für ein anderes Problem gestoßen. Lassen Sie mich das ganz schnell erklären.
Ich hatte die gleiche Stil-URL und versuchte auch, sie zu vertreten.
Beispiel: Proxy-Anforderungen von
/example/
einem anderen Server.Problem 1: Apache glaubt, dass dies eine ungültige URL ist
Lösung:
AllowEncodedSlashes On
in httpd.confProblem 2: Apache dekodiert die codierten Schrägstriche
Lösung:
AllowEncodedSlashes NoDecode
in httpd.conf (erfordert Apache 2.3.12+)Problem 3: mod_proxy versucht, die URL, die sich
%2F
in%252F
(z. B./example/http:%252F%252Fwww.someurl.com/
) ändert, neu zu codieren (doppelt zu codieren) .Lösung:
httpd.conf
Verwenden Sie dasProxyPass
Schlüsselwortnocanon
, um die unformatierte URL über den Proxy zu übergeben.httpd.conf Datei:
Referenz:
quelle
Ich habe auch sehr viele Stunden mit diesem Problem verschwendet. Ich bin etwas spät zur Party, aber es scheint, dass es jetzt eine Lösung gibt.
Gemäß diesem Thread gibt es (gab) einen Fehler in Apache
AllowEncodedSlashes On
, der den 404 verhindert, aber fälschlicherweise die Schrägstriche dekodiert , was laut RFC falsch ist.Dieser Kommentar bietet eine Lösung, nämlich zu verwenden:
quelle
Angesichts all der Probleme entschied ich mich für base64_encoding, gefolgt von urlencoding. Es funktioniert, ohne mit den Einstellungen des Apache-Servers herumspielen oder Fehlerberichte anzeigen zu müssen. Es funktioniert auch, ohne die URL in den Abfragebereich einfügen zu müssen.
und um es zurückzubekommen
quelle
/
unabhängig von der Methode, um es zu machen, ist immer noch eine%2F
, nicht wahr ?Nach einigem Testen und Betrachten des Fehlers in Apache bin ich zu dem Schluss gekommen, dass dies trotz angebotener Lösungen in verschiedenen Foren ein ungelöstes Problem in Apache ist. Siehe den Fehler: https://issues.apache.org/bugzilla/show_bug.cgi?id=35256
Die Problemumgehung, die für mich funktioniert, besteht darin, den URI so umzugestalten, dass sich das Element, das die maskierten Schrägstriche enthalten kann, im Abfrageabschnitt des URI anstelle des Pfads befindet. Meine Tests zeigen, dass sie dort nicht von Apache herausgefiltert werden, unabhängig von den Einstellungen AllowEncodedSlashes und AcceptPathInfo.
Damit:
http://test.com/url?http%3A%2F%2Fwww.url2.com
oder:
http://test.com/url?theURL=http%3A%2F%2Fwww.url2.com
anstatt:
http://test.com/url/http%3A%2F%2Fwww.url2.com
Dies bedeutet eine Änderung der Architektur für unser Projekt, die jedoch unvermeidlich erscheint. Ich hoffe, Sie haben eine Lösung gefunden.
quelle
Ersetzen Sie
%2F
durch%252F
auf der Client-Seite.Dies ist die doppelt codierte Form des Schrägstrichs.
Wenn es den Server erreicht und vorzeitig dekodiert wird, wird es in% 2F dekodiert, was genau das ist, was Sie wollen.
quelle
Ich habe das gleiche Problem mit "AllowEncodedSlashes On" und habe versucht, die Direktive an verschiedenen Stellen zu platzieren: apache2.conf, httpd.conf und in einem Abschnitt, wie in einem Beispiel unter http: //www.jampmark angegeben .com / web-scripting / 5-Lösungen-zu-URL-codierten-Schrägstrichen-Problem-in-Apache.html .
Wenn Sie dies noch nicht getan haben, möchten Sie möglicherweise Ihre Protokollierungsstufe auf Debug (eine andere Anweisung) setzen und prüfen, ob der Fehler angezeigt wird:
% 2f (codiert '/') in URI (decodiert = '/ url / http: //www.url2.com') gefunden und 404 zurückgegeben
Andere nicht gefundene Fehler geben diese Informationen nicht in den Protokollen an. Nur eine weitere Diagnose ...
Viel Glück (an uns beide)!
quelle