diff --git a/redirect.admin.inc b/redirect.admin.inc index a6610d5..4e859ed 100644 --- a/redirect.admin.inc +++ b/redirect.admin.inc @@ -683,6 +683,14 @@ function redirect_settings_form($form, &$form_state) { '#title' => t('Allow redirections on admin paths.'), '#default_value' => variable_get('redirect_global_admin_paths', 0), ); + if (module_exists('locale')) { + $form['globals']['redirect_global_language_prefix'] = array( + '#type' => 'checkbox', + '#title' => t('Enforce Language Prefix'), + '#description' => t('Enforce language prefix in paths.'), + '#default_value' => variable_get('redirect_global_language_prefix', 0), + ); + } $form['submit'] = array( '#validate' => array('redirect_settings_form_validate'), diff --git a/redirect.module b/redirect.module index 18841a3..315d590 100644 --- a/redirect.module +++ b/redirect.module @@ -401,6 +401,13 @@ function redirect_init() { redirect_redirect((object)array('redirect' => $request_uri . '/', 'type' => 'global')); } + // Force langauge prefix. + if (variable_get('redirect_global_language_prefix', 0) && module_exists('locale')) { + list($language, $raw_path) = language_url_split_prefix($request_uri, language_list()); + if (!$language) { + redirect_redirect((object)array('redirect' => $request_uri, 'type' => 'global')); + } + } } /** @@ -1092,7 +1099,9 @@ function redirect_goto($redirect) { if (!variable_get('redirect_global_canonical', 0)) { $redirect->redirect_options['alias'] = TRUE; } - $url = url($redirect->redirect, $redirect->redirect_options); + // Peel off language prefix if already there. + list($language, $raw_path) = language_url_split_prefix($redirect->redirect, language_list()); + $url = ($language) ? url($raw_path, $redirect->redirect_options) : url($redirect->redirect, $redirect->redirect_options); drupal_add_http_header('Location', $url); drupal_add_http_header('Status', redirect_status_code_options($redirect->status_code));