存在しないページにアクセスしても、他のページと同様にプライマリリンクとセカンダリリンクが表示されるはずですが、404ページにはナビゲーションリンクがありません。 404ページにナビゲーションリンクがない も参照してください。
私は解決策を見つけましたが、他の何かがこれを修正できる(多分、追加のモジュールを使用せずに)場合は満足しています。
カスタムモジュールでページを定義することでそれを行うことができます。
hook_menu()
を使用して、「ページが見つかりません」というカテゴリのページを作成します。
_function MODULE_menu() {
$items['page-not-found'] = array(
'title' => '',
'page callback' => 'MODULE_page_not_found',
'access callback' => TRUE,
);
return $items;
}
function MODULE_page_not_found() {
drupal_set_title('Page not found');
$cust_err = "";
$cust_err = $cust_err . "The requested page " . current_path() . " could not be found";
return $cust_err;
}
_
ページコールバックはcurrent_path()
を使用して、404エラーの原因となっているページのパスを返します。
Admin> Config> System> Site-informationに移動し、page-not-found( Default 404(not found)pageの下の_hook_menu
_)で定義されているのと同じ名前。
次のスクリーンショットのように、エラーページが表示されます。
すべてのナビゲーションリンクと、エラーを生成するページのURL(元のページが見つからないのと非常に似ている)が含まれていることは明らかです。上記の回答で@ Nikhil によって言及されているモジュールは、「要求されたページが見つかりませんでした」と出力します。エラーの原因となっているページのURLは含まれていません。
これを機能させるためのモジュールがあります 404ナビゲーション
404 Not Foundエラーページでは、Drupalは、パフォーマンス上の理由から、Webサイトのすべてのナビゲーションリンクのレンダリングをスキップします*。これらの一部は次のとおりです。
「プライマリリンク」ブロックとその他のメニューリンクブロック。テーマのプライマリリンクとセカンダリリンク。 * admin/config/system/site-informationで「デフォルト404(見つかりません)」ページを構成していない限り。
また、D7でこれを修正するための Patch もあります。
D8では [〜#〜] this [〜#〜] も参照 [〜#〜] this [〜#〜] も参照
良いモジュールの選択肢もあります:
このモジュールは、標準の「404ページが見つかりません」を表示する代わりに、URL内のキーワードで検索を実行します。ユーザーが http://example.com/does/not/exist にアクセスすると、このモジュールは「存在しない」を検索し、404ページの代わりに検索結果を表示します。これは、他のサイトまたは検索インデックスからリンクされた古いURLからの訪問者を維持するのに役立ちます。
Drupalには高額な404エラーがあります。 「平均的な」モジュールの負荷がある「平均的な」サイトでは、サーバーで消費される60〜100MBのメモリを見て404を配信している可能性があります。不良な.gifリンクと欠落した.cssファイルのあるページを検討してください。そのページは、ページの実際のロードとともに2つの404を生成します。ほとんどの場合、ページのサーバーに必要な60MBではなく、180MBのメモリを使用しています。
カスタムモジュールでページを定義することでそれを行うことができます。
Hook_menu()を使用して、「ページが見つかりません」というカテゴリのページを作成します。
function MODULE_menu() {
$items['page-not-found'] = array(
'title' => '',
'page callback' => 'MODULE_page_not_found',
'access callback' => TRUE,
);
return $items;
}
function MODULE_page_not_found() {
drupal_set_title('Page not found');
$cust_err = "";
$cust_err = $cust_err . "The requested page " . current_path() . " ould not be found";
return $cust_err;
}
それはほぼ良好です。しかし、このコードは次を返します:
「リクエストされたページpage-not-foundが見つかりませんでした」
変更が必要current_path()からrequest_uri()返されます:
「リクエストされたページ/ request_uriが見つかりませんでした」