0

所以,我一直在尝试添加一个 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

取决于我是在生产还是开发。

和想法?

4

1 回答 1

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

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

sudo service apache2 reload
于 2013-07-31T20:15:41.380 回答