Ошибка: Сайт выполнил слишком много переадресаций

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

Аватар пользователя nikolasun nikolasun 29 октября 2018 в 1:32

Друзья, помогите. Хотел переводить всех анонимных юзеров на страницу входа/регистрации. Пытался делать через рулс - Событие: инициализация друпал. При входе на сайт под анонимом пишет: Сайт выполнил слишком много переадресаций. Потом пытался делать через модуль anonymous_redirect - проблема повторяется. Написал свой модуль, все равно та же проблема. Есть идеи почему так?

Лучший ответ

Аватар пользователя sas@drupal.org sas@drupal.org 29 октября 2018 в 15:57
1

Например

Events: Drupal is initializing
Conditions:

User has role(s) - Parameter: User: [site:current-user], Roles: anonymous user
NOT Text comparison - Parameter: Text: [site:current-page:url], Matching text: user/login
Actions: Page redirect - Parameter: URL: user/login

Комментарии

Аватар пользователя nikolasun nikolasun 29 октября 2018 в 15:27

Правило:
Событие: Инициализация Друпал
Условие: если пользователь имеет роль...
Действие: Переадресация

Аватар пользователя sas@drupal.org sas@drupal.org 29 октября 2018 в 15:57
1

Например

Events: Drupal is initializing
Conditions:

User has role(s) - Parameter: User: [site:current-user], Roles: anonymous user
NOT Text comparison - Parameter: Text: [site:current-page:url], Matching text: user/login
Actions: Page redirect - Parameter: URL: user/login

Аватар пользователя nikolasun nikolasun 29 октября 2018 в 15:31

а вот через свой модуль

<?php
/**
 * Implements hook_init().
 */
function anredirect_init() {
 
  
// Если пользователь анонимный
  
if (user_is_anonymous()) {
    
$redirect FALSE;
 
    foreach (array(
'cron''install''xmlrpc') as $task) {
      
$path base_path() . "{$task}.php";
      if (
substr(request_uri(), 0strlen($path)) == $path) {
        return;
      }
    }
 
    if (!
drupal_is_cli()) {
 
        
$path drupal_strtolower(filter_xss($_GET['q']));
 
        
$path $path $path '<front>';

        if (

$path != '/home') {
         
$redirect TRUE;
        }
 
        if (
$redirect) {

          if (

$message variable_get('anonymous_login_message'NULL)) {
            
drupal_set_message(t($message));
          }
 
          
drupal_goto('/home', array('query' => drupal_get_destination()));
        }
    }
  }
}
?>
Аватар пользователя Orion76 Orion76 29 октября 2018 в 15:41

Не понятно, что этот код должен делать ..
Судя по его "логике" достаточно было проверки:

<?php
if(user_is_anonymous() && arg(0)!=='home'){
drupal_goto('/home', array('query' => drupal_get_destination()));
}
?>
Аватар пользователя nikolasun nikolasun 29 октября 2018 в 20:35

Все получилось. Вместо Инициализация Друпал выбрал Создана запись в системном журнале. Но теперь одна проблема: если пользователь, при входе, ввел не правильные данные, то ему показывает не ошибку а просто перекидывает на страницу home. Как можно решить эту проблему?

Аватар пользователя bumble bumble 29 октября 2018 в 21:01
1

Каким боком аноним к системному журналу??

Вам просто нужно было добавить проверку текущей страницы, чтоб не переходило с себя на себя же до посинения падения сервера.

Аватар пользователя nikolasun nikolasun 29 октября 2018 в 21:20

я пытался это сделать. Добавлял в условие:
"НЕ ИЛИ

Сравнение данных
Параметр: Данные для сравнения: [site:url], Значение данных: /home"
Может я, просто, не понимаю?

Аватар пользователя bumble bumble 29 октября 2018 в 21:36

[site:url] - адрус Вашего сайта.
Вам нужно проверять текущий путь

Можете импортнуть правило:

{
  "rules_redirect_anonimus_to_the_homepage" : {
    "LABEL" : "Redirect anonimus to the homepage",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "NOT data_is" : { "data" : [ "site:current-page:path" ], "value" : "home" } },
      { "user_has_role" : {
          "account" : [ "site:current-user" ],
          "roles" : { "value" : { "1" : "1" } }
        }
      }
    ],
    "DO" : [ { "redirect" : { "url" : "home", "destination" : "1" } } ]
  }
}

ЗЫ - не забывайте учитывать сценарии когда пользователя не следует перенаправлять, например со страницы восстановления пароля.

Аватар пользователя Orion76 Orion76 29 октября 2018 в 21:41

Кстати, если всех анонимов перенаправлять на один адрес, любопытно, что у поисковиков в индексе окажется-)

Аватар пользователя adano adano 29 октября 2018 в 23:45

Сайт из выдачи просто вылетит и все.
Я изначально на событие намекнул... Потом уже только проверка на анонима делается.

По SEO: никогда не перенаправляйте форсированно юзеров/анонимов без их манипуляций на сайте.

Аватар пользователя gun_dose gun_dose 30 октября 2018 в 6:42

Мне кажется, если сайт только для зарегистрированных юзеров, то поисковик вообще не должен знать о его существовании.