Symfony 2 404缺少资源的自定义页面

时间:2013-07-31 19:39:08

标签: .htaccess symfony

所以,我一直在尝试添加一个404控制器,以防图像丢失,我需要去拿它。

最初,我尝试了一个NotFoundHttpException / ResourceNotFoundException监听器,它加载了一个类来处理它。如果是Symfony2路由问题,这很有用。

问题是,事实并非如此。这是一个/web/bundles/mysite/images/missingimage.jpg 404,它似乎是由Apache处理的。

所以我试过.htaccess:

<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>

只是为了看看我是否可以让它发挥作用,但我感觉它不会,但它没有。

那么当我遇到/ 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

取决于我是在prod还是dev。

和想法?

1 个答案:

答案 0 :(得分:0)

您有两种选择。

首先是通过Symfony2应用程序路由所有图像。 LiipImagineBundle执行此操作以生成缩略图。您可以将所有404重定向到自定义错误页面。缺点是即使对于静态映像,整个Symfony2内核也需要启动。这是时间和资源的昂贵。

第二个选项是从Apache2重定向到未知路由或引发404 / HttpNotFoundException的路由:

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

这使您可以更好地控制错误消息,因为您可以呈现树枝模板或记录错误消息。


你是对的。当我在ErrorDocument中插入.htaccess时,我在使用自定义控制器时遇到了一些问题。解决方案是修改vhost。转到/etc/apache2/sites-available并选择存储虚拟主机的文件(默认情况下称为default)。替换AllowOverride中的<Directory>选项。并用这些代替它:

   AllowOverride FileInfo
   ErrorDocument 404 /not_found.html

找到解决方案here。不要忘记重新加载您的apache配置:

sudo service apache2 reload