2016-09-07 3 views
1

나는 다음과 같은 경로를 정의 :경로 매개 변수에서 URL을 보내는 방법은 무엇입니까?

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

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

그것의 내가 http://없이 URL을 통과하지만 http:// 또는 https://로 나에게 404 page not found -page을 줄 때 잘 작동. 또한 URL 인코딩 된 문자열로 시도했지만 동일한 오류가 발생합니다.

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. 

Slim Version 3.1을 사용하고 있습니다. URL을 내부 URL을 사용

+0

, 그것으로 올바른 표시하십시오. – jmattheis

+0

@jmattheis 당신의 대답은 좋지만 내 문제를 해결하지 못했습니다. 제발 인수를 통과하고 싶은 질문을 통해 .. .. ?? 이미 제안한 방법에 대해 알고 있지만 내 방식대로하고 싶습니다. 어쨌든 당신의 도움에 감사드립니다. – Ritesh

+0

네, 내 대답을 보라. 인코딩되지 않은''/''로 전달할 수없는 이유가 무엇인지, 그리고 인코딩 된''/''로 어떻게 가능할 수 있는지. 나는 네가 원하는 것을 모른다. – jmattheis

답변

3

그런 다음 경로가 다음 경로 내부 definied되지 않은 URL 후 추가 경로가 원인을 실행하지 않는 슬래시와 함께 URL을 추가

:

예 : example.org/abc/test은 잘 작동하지만 example.org/abc/http://x/abc/{url}//{other}과 같은 경로 정의에서만 작동합니다. URL을 내부

아파치 블록이 있기 때문에 보안상의 이유입니다 404 찾을 수 없음 오류가있는 URL에 /에 대한 \에 대한 %5C%2F 모든 요청을 인코딩 된 URL을 사용

. 따라서 슬림 한 프레임 워크에서 404를 얻지는 않지만 웹 서버에서 404를 얻습니다. 따라서 코드는 절대 실행되지 않습니다.

AllowEncodedSlashes Onhttpd.conf 개로 설정하여 사용 설정하면됩니다.

내 권장 인코딩을 가지고 유효이

가있는 GET 매개 변수로 URL을 추가 수정 아파치 설정을 변경하지 않고 슬래시합니다. 내 대답은 당신을 도울 수있는 경우

예 호출은 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 
}); 
관련 문제