2016-07-16 3 views
1

수동으로 잘못된 URL을 입력하면 내 .htaccess가 제대로 작동하여 내 맞춤 404 페이지로 리디렉션됩니다. 클라이언트가 존재하지 않는 클라이언트를 편집하려고하면 silex에서 404 상태 코드를 반환하지 않습니다 .htaccess

RewriteEngine on 
ErrorDocument 404 http://codeexample.local/404.shtml 

지금 내 렉스 기반 응용 프로그램에서 나는 404 상태 코드를 반환 : 여기 내 htaccess로 (구멍의 내용이 (다른 리디렉션))입니다. curl -v로 볼 수있는 상태 코드는 실제로 404입니다. 하지만 어떤 이유로 404 오류 페이지로 리디렉션되지 않습니다. 클라이언트가 데이터베이스에있는 경우 내가 확인하고 내 editAction 방법에

$app->match('/{id}/edit', function (Request $request, $id) use ($app) { 
    try { 
     $clientController = new ClientController($request, $id); 
     return $clientController->editAction($app); 
    } 
    catch(\Exception $e){ 
     return $e->getMessage(); 
    } 
}) 
->assert('id', '\d+') 
->method('GET|POST'); 

: 여기

http://codeexample.local/index.php/2/edit 

내 index.php를 편집 도로 구간입니다 : 여기

내가 URL을 액세스하는 방법입니다

$response = new Response(
     '', 
     Response::HTTP_NOT_FOUND, 
     array('content-type' => 'text/html') 
     ); 
$response->prepare($request); 
$response->send(); 

return $response; 

감사

: otherwhise 나는이 같은 응답을 반환하고

답변

-1

귀하의 기대치는 아마도 약간 벗어날 수 있습니다. 웹 서버는 404 응답에 대해 알지 못하는 주소에 대한 요청을 처리하고 404 응답과 함께 보낼 일부 HTML을 제공 할 수도 있습니다. 그러나 실제로 중요한 비트 인 404 응답입니다. 404.shtml 웹 서버를 말하는

해당 페이지에 리디렉션처럼되지 않습니다 브라우저로 다시 보낼 수있는 마크 업, 그것은 단지로 다시 보내도록 HTML에 대한 해당 파일의 내용을 사용하여 404 응답.

Silex는 웹 서버의 404 처리가 Silex가 요청한 곳 근처에 도착할 때까지 오랫동안 빠져 있기 때문에 아무것도 모릅니다. Silex 끝 부분에 404 조건이있는 경우 두 가지 작업을 수행해야합니다. 응답에 404 코드를 반환하고 (지금하고 있음) 원하는 경우 일부 콘텐츠를 다시 보낼 수도 있습니다 (404 코드의 마크 업처럼). .shtml 파일). 웹 서버가 사용하는 404.shtml과 동일한 404 마크 업을 원하면 해당 파일을 읽고 404 응답을 사용하여 내용으로 반환하십시오.

다른 경로로 이동하여 웹 서버 404에 다시 접속하여 Silex 라우트 된 URL의 결과를 반환 한 다음 Silex의 404 내용에도 내부적으로 동일한 경로를 사용할 수 있습니다. 웹 서버가 이미 유효하지 않은 것으로 확인 된 요청에 대한 응답으로 PHP/Silex를 도청하는 잘못된 접근.

아니요,은 Silex에서 404에 대한 마크 업을 포함하는 문서로 리디렉션합니다. 사용자 에이전트에게 시도한 URL이 잘못되었음을 사용자 에이전트에게 알려주는 것이 좋습니다. 또 하나 (리다이렉트 헤더에 의해 제공됨)을 시도한 다음 마크 업에서 사람에게 404 메시지를 반환하지만 사용자 에이전트에 200-OK를 반환합니다. 따라서 사용자 에이전트가/someBadPage를 탐색 할 때 사실상 유효합니다.html로하면 해당 URL에 대한 올바른 문서가 /404.html이라고 말할 수 있습니다. /someBadPage.html은 존재하지 않습니다.

+0

아무런 설명없이 기권표에 대한 환호성. 그것은 정말로 지역 사회에 도움이됩니다. 잘 하셨어요. 잘 했어. * 너. –

0

오류 페이지로 리디렉션해야합니다.

$app->redirect('/404.shtml'); 

코드에서 상태 코드를 사용하여 새 응답을 만듭니다. 아파치 서버가 반응하기에는 너무 늦었습니다. 그리고 다른 아이디어는 errorpage를 생성하는 함수를 호출하는 것이지만, 코드를 깨끗하게 유지하는 것은 아닙니다.

+2

404 페이지로 리디렉션하지 않으려는 경우 404 페이지를 탐색합니다. 연습의 목적은 단순히 "우리는 그 페이지를 가지고 있지 않다"는 견해를 반환하는 것이 아니라 요청 된 * URL을 사용할 수 없다는 * 브라우저 * (더 중요한 것은 검색 엔진)에 알려주고 싶습니다. "이 페이지를 의미한다고 생각합니다."라는 대답은 아닙니다. 이것이 바로 리디렉션의 의미입니다. –

관련 문제