Друзья, помогите. Хотел переводить всех анонимных юзеров на страницу входа/регистрации. Пытался делать через рулс - Событие: инициализация друпал. При входе на сайт под анонимом пишет: Сайт выполнил слишком много переадресаций. Потом пытался делать через модуль anonymous_redirect - проблема повторяется. Написал свой модуль, все равно та же проблема. Есть идеи почему так?
Ошибка: Сайт выполнил слишком много переадресаций
Главные вкладки
Лучший ответ
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
Комментарии
Надо убрать переадресацию, если если текущая страница является целевой (т.е. user или user/register).
Скорее всего, событие надо поменять.
А можно увидеть правило, или как Вы сделали через свой модуль?
Правило:
Событие: Инициализация Друпал
Условие: если пользователь имеет роль...
Действие: Переадресация
Например
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
а вот через свой модуль
<?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(), 0, strlen($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()));
}
}
}
}?>
Не понятно, что этот код должен делать ..
Судя по его "логике" достаточно было проверки:
<?php
if(user_is_anonymous() && arg(0)!=='home'){
drupal_goto('/home', array('query' => drupal_get_destination()));
}
?>
if(user_is_anonymous() && current_path() != 'user'){
drupal_goto('user');
}
...
Чтобы понять что такое рекурсия - нужно понять что такое рекурсия.
Все получилось. Вместо Инициализация Друпал выбрал Создана запись в системном журнале. Но теперь одна проблема: если пользователь, при входе, ввел не правильные данные, то ему показывает не ошибку а просто перекидывает на страницу home. Как можно решить эту проблему?
Каким боком аноним к системному журналу??
Вам просто нужно было добавить проверку текущей страницы, чтоб не переходило с себя на себя же до
посиненияпадения сервера.я пытался это сделать. Добавлял в условие:
"НЕ ИЛИ
Сравнение данных
Параметр: Данные для сравнения: [site:url], Значение данных: /home"
Может я, просто, не понимаю?
[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" } } ]
}
}
ЗЫ - не забывайте учитывать сценарии когда пользователя не следует перенаправлять, например со страницы восстановления пароля.
Кстати, если всех анонимов перенаправлять на один адрес, любопытно, что у поисковиков в индексе окажется-)
/home
Но тут лучше дизалаунуть весь сайт в роботс, иначе поисковики дизалаунут сайтец
а можно подробнее об этом?
У Вас все анонимы пересылаются на /home
Все поисковики - анонимы
Сайт из выдачи просто вылетит и все.
Я изначально на событие намекнул... Потом уже только проверка на анонима делается.
По SEO: никогда не перенаправляйте форсированно юзеров/анонимов без их манипуляций на сайте.
Не о 301 редиректе, имею ввиду, когда реально требуется перенаправление на целевую страницу.
О каких "манипуляциях" идет речь?
Мне кажется, если сайт только для зарегистрированных юзеров, то поисковик вообще не должен знать о его существовании.
Все получилось!) Спасибо всем огромное)