drush site-upgrade
を使用してサイトをD6からD7に移行した後、D6バージョンの一部のパブリックコンテンツが、より効率的な/system/files/logo.png
ではなく、インスタンス/sites/default/files/logo.png
などのURIを含む画像を参照していることに気付きました
ディスク上にはsystem
ディレクトリがなく、URLの書き換えも見られないため、最初のフォームはルーティングのためにDrupal)になると思います。
問題は、D7のアップグレード後に、そのような参照が「ページが見つかりません」エラーにつながり、画像が破損することです。
テストとして、somefile.png
を/sites/default/files/
にドロップすると、D6は喜んでサービスします http://example.com/system/files/somefile.png ファイルがデータベースのどこにも知られていません。しかし、D7は明らかにそれを行いません。
/system/files
は、D7ではなくD6に対して何かを意味するハードコードされたパスコンポーネントですか? /admin/config/media/file-system
では、ダウンロード方法は「公開ローカルファイル...」に設定されています。
Drupal 7でこれを解決する方法?どこかに欠けている構成設定がありますか?
D6では、system
モジュールは、_system/files
_を_file_download
_コールバックに関連付ける次のメニューエントリを提供します。
system_menu()
関数内:
_ $items['system/files'] = array(
'title' => 'File download',
'page callback' => 'file_download',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
_
次に、file_download(),
で、ファイルが存在し、ダウンロードするhook_file_download()
オブジェクトがない場合、ファイルが提供されます。
一方、D7はページ引数をprivate
に設定して展開します。
_ $items['system/files'] = array(
'title' => 'File download',
'page callback' => 'file_download',
'page arguments' => array('private'),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
_
これは、_private://
_スキームをファイル名の前に付加する効果があります。これは、_file_download
_が登録されたファイルストリームラッパーを要求して処理します。
デフォルトでは(_/admin/config/media/file-system
_にプライベートパスが設定されていない)、このスキームは登録されていません。そのため、_GET /system/files/logo.png
_は最終的に404ステータスで失敗します。
プライベートファイルシステムパスを_sites/default/files
_(パブリックパスと同じ)に設定すると、機能します。
ただし、Drupalを介してパブリック静的ファイルをルーティングすることは、httpdによる直接アクセスよりもはるかに重いため、サイトで必要な場合に実際のプライベートスペースを使用できなくなるため、長期的な修正としては適切ではありません。それは将来的に。
長期的な修正は、これらの_/system/files/xyz
_参照を探し、それらを_/sites/default/files/xyz
_に置き換えることです。