所以,我一直在尝试添加一个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。
和想法?
答案 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