2016-09-07 4 views
1

Ich habe eine Route wie folgt definiert:Wie sende ich eine URL in Route Parameter?

$app->map(['GET', 'POST'],'/abc/[{url}]', function ($request, $response, $args) { 

    return $response; 
})->add(new CustomMiddleware()); 

Seine Arbeit gut, wenn ich eine URL ohne http:// passieren aber gibt mir ein 404 page not found -Page mit http:// oder https://. Ich habe auch mit URL-codierten String versucht, aber gibt denselben Fehler:

http://localhost/slim/public/index.php/abc/http%3A%2F%2Fstackoverflow.com 

The requested URL /slim/public/index.php/abc/http://stackoverflow.com was not found on this server. 

Ich benutze Slim Version 3.1.

+0

Wenn meine Antwort Ihnen helfen kann, bitte markieren als richtiges. – jmattheis

+0

@jmattheis Ihre Antwort ist gut, hat aber meinem Problem nicht gedient. Bitte gehen Sie die Frage durch, wie ich das Argument weitergeben möchte. bin mir bereits über die Art und Weise, wie du vorgeschlagen hast, im Klaren, aber ich möchte es auf meine Art tun ... trotzdem danke für deine Hilfe. – Ritesh

+0

Ja schau dir meine Antwort an, warum es nicht möglich ist, sie mit nicht codiertem '' '' ''zu übergeben, dann ist es möglich mit codiertem' '' '' '' '' '' '' '' '' ''. Ich weiß jetzt nicht was du willst. – jmattheis

Antwort

3

eine URL in der URL

Wenn Sie die URL mit Schrägstriche Zugabe dann die Route Ursache ausführen nicht bekommen, dann nach der URL gibt es zusätzlichen Weg, die innerhalb der Route nicht definiertem ist:

Eg example.org/abc/test funktioniert gut, aber example.org/abc/http://x funktioniert nur mit einer Route-Definition wie dieser /abc/{url}//{other}.

eine codierte URL in der URL

Apache blockiert alle Anfrage mit %5C für \ und %2F für / in der URL mit einer 404 Not Found error dies aus Sicherheitsgründen ist. Sie erhalten also keinen 404 aus dem schlanken Framework, sondern von Ihrem Webserver. Dein Code wird nie ausgeführt.

Sie können dies aktivieren, indem Sie AllowEncodedSlashes On in Ihrem httpd.conf von Apache setzen.

Meine Empfehlung an dieses Problem beheben

die URL als GET-Parameter hinzufügen gibt es gültig ist kodieren müssen Schrägstriche, ohne dass die Apache-Konfiguration zu ändern.

Beispielaufruf http://localhost/abc?url=http%3A%2F%2Fstackoverflow.com

$app->map(['GET', 'POST'], '/abc', function ($request, $response, $args) { 
    $getParam = $request->getQueryParams(); 
    $url= $getParam['url']; // is equal to http://stackoverflow.com 
}); 
Verwandte Themen