2013-07-31 4 views
0

이미지가 누락 될 경우를 대비하여 404 컨트롤러를 추가하려고 했으므로 가져와야합니다.Symfony 2 404 누락 된 리소스에 대한 사용자 정의 페이지

처음에는 처리 할 클래스를로드 한 NotFoundHttpException/ResourceNotFoundException 리스너를 시도했습니다. 이것은 Symfony2 라우팅 문제라면 훌륭하게 작동했습니다.

문제는 없습니다. 아파치가 처리하는 /web/bundles/mysite/images/missingimage.jpg 404입니다. 내가 그 일을 얻을 수 있다면

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 
    RewriteRule ^(.*) - [E=BASE:%1] 

    RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule .? - [L] 

    RewriteRule .? %{ENV:BASE}/app.php [L] 

    ErrorDocument 404 /web/404.txt 
</IfModule> 

그냥보고 있지만은 그렇지 않은 것 느낌을 얻을 그것은하지 않았다 :

그래서 htaccess로와 내가 시도했다.

그렇다면/web 폴더 내에 404가있을 때 Symfony2 페이지로 전달되도록 설정을 어떻게 얻을 수 있습니까?

나는 그것이 .htaccess이어야한다고 생각하고있다. 그러나 나는 많이 본다.

/web/app.php/FourZeroFourHandler/web/bundles/mysite/images/missingimage.jpg 

나 :

/web/app_dev.php/FourZeroFourHandler/web/bundles/mysite/images/missingimage.jpg 

내가 자극 또는 디바이스에서 오전 여부에 따라 결국

는, 나는에 가고 싶다.

아이디어가 있습니까?

+0

본 사이트는 다음과 같습니다 : http://symfony.com/doc/current/cookbook/controller/error_pages.html # customizing-the-404-page-and-other-error-pages – cheesemacfly

+0

슬프게도 Symfony 404가 던져지지 않습니다. 이미지는 Symfony2 라우팅 외부에 있으므로 NotFoundHttpException을 발생시키지 않습니다. Symfony 2를 모두 우회하고 404에 대해 알고있는 유일한 것은 Apache입니다. 그래서 404가 작동하면 아파치가 특정 라우트 된 URL로 이동하게하려고합니다. – Adi

답변

0

두 가지 옵션이 있습니다.

첫 번째 것은 모든 이미지를 Symfony2 앱을 통해 라우팅하는 것입니다. LiipImagineBundle은 미리보기 이미지를 생성하기 위해이 작업을 수행합니다. 마찬가지로 모든 404을 사용자 지정 오류 페이지로 리디렉션 할 수 있습니다. 단점은 정적 이미지의 경우에도 Symfony2 커널 전체를 부팅해야한다는 것입니다. 시간과 자원이 많이 들었습니다.

두 번째 옵션은 알 수 없거나 발생 경로에있는 경로에 아파치에서 리디렉션하는 것입니다 404/HttpNotFoundException : 당신이 렌더링 할 수 있기 때문에 오류 메시지를 통해 더 많은 제어 할 수 있습니다

/* 
* @Route('/404', name="not_found") 
*/ 
public function notFoundAction() 
{ 
    return new HttpNotFoundException(); 
} 

나뭇 가지를 틀거나 오류 메시지를 기록하십시오.


당신 말이 맞습니다. 또한 .htaccessErrorDocument을 삽입했을 때 사용자 정의 컨트롤러에 약간의 문제가있었습니다. 해결 방법은 vhost 대신 수정하는 것입니다. /etc/apache2/sites-available으로 이동하여 가상 호스트 ist가 저장된 파일 (기본적으로 default이라고 함)을 선택하십시오. <Directory>에서 AllowOverride 옵션을 바꿉니다. 그리고 다음 줄로 바꾸십시오 :

AllowOverride FileInfo 
    ErrorDocument 404 /not_found.html 

해결책은 here입니다. 아파치 구성을 다시로드하는 것을 잊지 마십시오 :

sudo service apache2 reload 
+0

나는 아파치가 컨트롤러 경로로 404를 리다이렉트하기로 결정했다. 현재 ErrorDocument 404가 작동하지 않는 것 같습니다. 웹을 조금 둘러 보았을 때 Symfony 2에서 작동하지 않는다는 인상을 받았습니다. – Adi

+0

작동합니다. 내 예제에서는'/ 404'로 리디렉션됩니다. '.htacces'에 다음과 같은 항목이 필요합니다 :'ErrorDocument 404/404' – ferdynator

+0

위에서 언급 한 것처럼, .htaccess ErrorDocument 404 /web/404.txt에 404.txt 파일이 존재합니다. 거기에없는 이미지에 액세스하려고 시도하면 표시되지 않습니다. 현재 내 마지막 줄은 다음과 같습니다. IfModule mod_rewrite.c (원래 게시판에있었습니다. 그러나 < > 안에 있었고 제거되었습니다.) 왜 작동하지 않는지에 대한 제안은 무엇입니까? – Adi

관련 문제