example.net против www.example.net? [РЕШЕНО]

Главные вкладки

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 5 января 2009 в 14:41

Добрый день!

Столкнулся с тем, что один и тот же пользователь может залогиниться на сайте дважды — один раз зайдя через example.net, а второй — через www.example.net. В результате в списке залогиненных имеются, например, сразу два ingumsky. Хочу от этого избавиться (либо сделать автоматический редирект с example.net на www.example.net, либо сделать единый логин для обоих вариантов обращения к домену), но не знаю даже, как сформулировать запрос к гуглу, чтобы найти решение этой «проблемы». Подскажите, плиз, что нужно сделать. Спасибо!

Комментарии

Аватар пользователя vikeng vikeng 5 января 2009 в 14:59

Для перенаправления можно немного подправить .htaccess. В нем самом всё написано, вот по русски:

  # Для перенаправления всех посетителей сайта на адрес С префиксом «www»
  # (http://example.com/… будет перенаправлен на http://www.example.com/…)
  # измените и расскоментируйте следующие строчки:
  # RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

Источник: http://setegnom.com/node/282

Аватар пользователя kosilko kosilko 5 января 2009 в 15:07

Берем файл user.module и находим код, выводящий список всех, кто онлайн. Выдираем этот кусок кода, создаем в админке новый блок с форматом ввода PHP. Вставляем туда скопированный код с внесенными нами незначительными изменениями (см. строки с $items[$account->uid])
:

if (user_access('access content')) {
  // Count users active within the defined period.
  $interval = time() - variable_get('user_block_seconds_online', 900);

  // Perform database queries to gather online user lists.  We use s.timestamp
  // rather than u.access because it is much faster.
  $anonymous_count = sess_count($interval);
  $authenticated_users = db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval);
  $authenticated_count = 0;
  $max_users = variable_get('user_block_max_list_count', 10);
  $items = array();
  while ($account = db_fetch_object($authenticated_users)) {
    if (!isset($items[$account->uid])) { ///<<< доп. условие
      if ($max_users > 0) {
        $items[$account->uid] = $account; /// <<< было $items[], стало $items[$account->uid]
        $max_users--;
      }
      $authenticated_count++;
    }
  }

  // Format the output with proper grammar.
  if ($anonymous_count == 1 && $authenticated_count == 1) {
    $output = t('There is currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', 'count users'), '%visitors' => format_plural($anonymous_count, '1 guest', 'count guests')));
  }
  else {
    $output = t('There are currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', 'count users'), '%visitors' => format_plural($anonymous_count, '1 guest', 'count guests')));
  }

  // Display a list of currently online users.
  $max_users = variable_get('user_block_max_list_count', 10);
  if ($authenticated_count && $max_users) {
    $output .= theme('user_list', $items, t('Online users'));
  }

  $block['subject'] = t('Who\'s online');
  $block['content'] = $output;
}

Стандартный друпаловский блок не забываем отключить. Всё это как вариант на скорую руку. Другой путь - сделать полностью свой блок с более простым/коротким кодом, взяв за основу запрос db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval);

Аватар пользователя VladSavitsky VladSavitsky 5 января 2009 в 18:50

Прежде чем делать редирект - проверьте что проиндексировано поисковиками.
Для них поддомен - отдельный сайт.
Если проиндексировано что-то одно - сначала нужно склеить домены, а затем уж ставить редирект.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 6 января 2009 в 1:48

Спасибо всем откликнувшимся!

vikeng
Как-то упустил я этот пункт на сетегноме. Спасибо!

kosilko
Ага. Это такое косметическое решение -) Но всё равно спасибо. Блок у меня используется из числа сниппетов, найденных на drupal.ru, так что думаю, я воспользуюсь Вашим советом и подкорректирую свой SELECT.

VladSavitsky
В моём конкретном случае думаю, что можно без проблем делать редирект, так как сайт пока находится в закрытой разработке, и поисковики на него не заглядывают. Но другим Ваш совет может пригодиться. Спасибо Вам!