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

私がprodかdevかによって異なります。

そしてアイデア?

4

1 に答える 1

0

2 つのオプションがあります。

1 つ目は、Symfony2 アプリを介してすべての画像をルーティングすることです。LiipImagineBundleは、サムネイルを生成するためにこれを行います。404そのように、すべてをカスタム エラー ページにリダイレクトできます。欠点は、静的イメージの場合でも、Symfony2 カーネル全体を起動する必要があることです。それには時間とリソースがかかります。

2 番目のオプションは、Apache2 から不明なルートまたは404/をスローするルートにリダイレクトすることHttpNotFoundExceptionです。

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

これにより、小枝テンプレートをレンダリングしたり、エラー メッセージをログに記録したりできるため、エラー メッセージをより細かく制御できます。


あなたが正しいです。に挿入ErrorDocumentしたときに、カスタムコントローラーにも問題がありました.htaccessvhost解決策は、代わりに編集することです。仮想ホストが保存され/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 に答える