3

学習目的で、symfony を使用しておもちゃのサイトを構築しています。

app_dev.phpを介して開発モードでサイトにアクセスすると、すべて正常に動作します。

また、本番モードでは、1 つの uri "/music" を除いてすべてが機能します。ここで、"/music/" へのリダイレクトが発生するため、奇妙な 404 エラーが発生します。

いくつかの調査の後、以下に説明するようにいくつかのことを試しました。しかし、私はいつも同じエラーが発生します。たぶん、誰でもこれを解決する方法を教えてくれます。


これがログエントリです。サーバーに送信されたときの「/music」ではなく、「/music/」に一致するルートを検索することに注意してください。

[2013-10-23 21:01:37] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: ""GET /music/" のルートが見つかりません" at /var/www/symfony/runamusic .de/app/cache/prod/classes.php 1883 行目 {"exception":"[object] (Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for \"GET /music/\" at /var/) www/symfony/runamusic.de/app/cache/prod/classes.php:1883、Symfony\Component\Routing\Exception\ResourceNotFoundException: /var/www/symfony/runamusic.de/app/cache/prod/appProdUrlMatcher で。 php:197)"} []

app/cache/prod へのアクセス許可を確認しましたが、問題ないようです

「app/cache/prod」を手動で削除して実行することで、キャッシュをクリアしましたphp app/console cache:clear --env=prod --no-debug

また、実行php app/console router:match /musicすると正しいルートが得られます

ludviki@ludviki-MacBook:/var/www/symfony/runamusic.de$ php app/console router:match /music
Route "runamusic_music_album_index" matches

[router] Route "runamusic_music_album_index"
Name         runamusic_music_album_index
Path         /music
Host         ANY
Scheme       ANY
Method       ANY
Class        Symfony\Component\Routing\Route
Defaults     _controller: Runamusic\MusicBundle\Controller\AlbumController::indexAction
Requirements NO CUSTOM
Options      compiler_class: Symfony\Component\Routing\RouteCompiler
Path-Regex   #^/music$#s

「app/config/routing.yml」にルートをインポートすると、プレフィックスは追加されません (プレフィックスに関するリダイレクトの問題について読みました)

...
runamusic_home:
    resource: "@RunamusicHomeBundle/Resources/config/routing.yml"
    prefix:   /

runamusic_music:
    resource: "@RunamusicMusicBundle/Resources/config/routing.yml"
    prefix:   /

runamusic_show:
    resource: "@RunamusicShowBundle/Resources/config/routing.yml"
    prefix:   /
...

「Bundle/.../config/routing.yml」のルート定義は次のとおりです。

runamusic_music_album_index:
    pattern:  /music
    defaults: { _controller: RunamusicMusicBundle:Album:index }

runamusic_music_album_show:
    pattern:  /music/album/{title}
    defaults: { _controller: RunamusicMusicBundle:Album:show }
...

パターンの名前を/musicから/musicaなどに変更すると機能しますが、ここではリダイレクトしません。

別のバンドルのパターンを/musicに再定義すると、 /music/への同じ不要なリダイレクトが発生します。

また、試した存在しないルートはすべてリダイレクトされます ( /Musicから/Music/へのリダイレクトはありません)

このルートのパターンを変更することで解決できる可能性があることは承知しています。しかし、将来これを避けるために、ここで何がうまくいかないのかを理解したいと思います。

多分 .htaccess の書き換えエラー?

ご協力いただきありがとうございます。


編集 3: 以前の追加を削除

4

2 に答える 2

1
app/console route:debug

そして、試合の順番を見てください:)

編集:

私はこれを見ています

symfony ルーティング コンポーネント

!methods が見えますか? より説明的な一致にリダイレクトしない方法(ANYではない)が少なくとも存在するかどうかを確認すると思います(ただし、そのベースパスから子ルートがあります)

有効なメソッドGET|POSTまたは必要なものを設定してみてください(GETだけだと思います)

于 2013-10-23T20:36:23.193 に答える
1

最後に、この動作の原因を見つけました。/music...ルートに必要な画像を.../web/ musicフォルダーに保存したため、/musicから/music/に URL が書き換えられました。画像を別の宛先(URIにはなりません...)に移動すると、問題が解決しました。

于 2013-10-24T15:19:04.810 に答える