実際に表示されているページに応じて404リダイレクトでURLを書き換えることは可能ですか?
たとえば、存在しないURL "/ fzenk"が要求され、デフォルトの404エラーページがフロントページになるように構成した場合、リダイレクト後のアドレスバーのURLはフロントページのURLになります。
グローバルリダイレクトモジュールを試しましたが、機能しませんでした。別のモジュールで404 redirect = URL-rewriteを実行することは可能ですか、それとも新機能をリクエストする必要がありますか?
更新:
それを行うことは可能ですが、404ページのURLを書き換えるのは 悪い考え のようです。
クリステル・アンダーソンの回答のおかげで、私はそれを正しく理解しているようです。
function THEME_preprocess_page(&$variables, $hook) {
$status = drupal_get_http_header("status");
if($status == "404 Not Found") {
// get the configured 404 error page url :
$not_found_url = variable_get('site_404');
unset($_GET['destination']);
drupal_goto($not_found_url);
}
}
構成されたデフォルトの404エラーページに従ってURLを書き換えます。多言語変数でも動作します。
すべての_404
_リクエストをフロントページにリダイレクトしたい場合、 template_preprocess_page()
フックと drupal_get_http_status()
を使用できると思います 404を確認するには:
_function THEME_preprocess_page(&$variables, $hook) {
$status = drupal_get_http_header("status");
if ($status == "404 Not Found") {
header("Location: http://exampel.com/");
drupal_exit();
}
}
_
このスレッドで提案されているメソッドを使用して403リダイレクトを機能させることができなかったため、代わりにカスタムメニューエントリを使用し、パスをネイティブdrupalエラーリダイレクトページに追加し、ボブのおじさん。= o)
/**
* Implements hook_menu().
*
*/
function MYMODULE_menu() {
$items = array();
// On the admin/config/system/site-information form, set the 404 and 403
// redirects to MYMODULE-custom-error/40x
$items['MYMODULE-custom-error'] = array(
'page callback' => 'MYMODULE_custom_error',
'page arguments' => array(1),
'access arguments' => array('access content'),
);
return $items;
}
/**
* Utility function to redirect users to the home page on 404 and 403 errors;
* note the settings on admin/config/system/site-information
*/
function MYMODULE_custom_error($error) {
unset($_GET['destination']);
drupal_goto();
}
Drupal 6の場合、わずかに変更されたコードを次に示します。
function THEME_preprocess_page(&$variables) {
$status = drupal_get_headers();
if(preg_match('/404 Not Found/', $status)) {
unset($_GET['destination']);
header("Location: /pagenotfound");
exit;
}
}
ここでは、リダイレクトにdrupal_goto()を使用できませんでした。これは無限ループになるためです。