Псевдоним пути создает цикл перенаправления или перенаправления на первую страницу


11

Когда я звоню нашему сайту "www.example.com/contact-us", я получаю следующую ошибку:

К сожалению, этот запрос пытался создать бесконечный цикл. Мы не допускаем таких вещей здесь. Мы профессиональный сайт!

Если я позвоню на сайт по адресу "www.example.com/node/5", страница с контактами будет отображаться очень хорошо.

Когда я проверяю псевдоним пути в / admin / config / search / path / edit / 6, системный путь и псевдоним устанавливаются правильно.

Другая проблема существует для другого псевдонима, когда я звоню «www.example.com/staff», меня перенаправляют на целевую страницу «www.example.com». Еще раз псевдоним установлен правильно.

Мы используем Drupal 7, модули i18n_redirect и redirect.


Я думаю, я нашел это: в "www.example.com/admin/config/search/redirect" были записи, перенаправляющие эти URL. Хотя я не знаю, как они туда попали ...
Матиас

Ответы:


19

Отредактируйте свою страницу и перейдите к перенаправлениям URL . Найдите путь перенаправления с наибольшим количеством и удалите его. Нажмите сохранить, затем просмотрите страницу.

Дайте мне знать, если это решило вашу проблему


У меня похожая проблема, и в то время как это устраняет проблемы для отдельных узлов, я пытаюсь выяснить, в чем причина, во-первых, чтобы с этого не начиналось.
золото

8

Обновление: проблема Drupal # 1796596 была совершена с Redirect 1.0-rc2 (июнь 2015 г.). Правильное решение для этой проблемы сейчас - обновить до последней стабильной версии модуля Redirect, а затем запустить обновления базы данных. Любые ваши перенаправления будут надежно очищены.

Эта проблема возникла из-за ошибки в модуле перенаправления. Вы запускаете его, изменяя URL-адрес страницы (или, может быть, просто ее заголовок, если вы используете pathauto), а затем изменяете ее на прежний.

Например, допустим, у меня была страница под названием «компания», и я изменил название на «Наша компания» (что изменило псевдоним URL на нашу компанию). Затем я решил, что на самом деле предпочитаю его первым способом, поэтому я снова отредактировал узел и изменил название на «Компания». В этот момент сообщение об ошибке « Ой, похоже, что этот запрос пытался создать бесконечный цикл. Мы не разрешаем такие вещи здесь. Мы - профессиональный веб-сайт! » Появится на странице компании.

Есть три способа исправить это, в зависимости от того, что проще для вас. Они варьируются по сложности / храбрости сверху вниз.

Метод Drupal / PHP

Существует длинная ошибка Drupal по этому вопросу: выпуск № 1796596, и есть хороший рабочий патч, который исправляет проблему в комментарии № 124 .

Надеюсь, это исправление скоро будет добавлено в модуль Redirect для загрузки. Однако прошло уже больше года без каких-либо признаков прогресса на этом фронте.

Метод SQL

Самое быстрое решение проблемы - это запрос SQL к базе данных, как показано ниже. БУДЬТЕ ОСТОРОЖНЫ и попробуйте этот метод только в том случае, если вы знаете, что делаете, - сначала попробуйте его на пробной копии сайта и убедитесь, что у вас есть резервная копия, и сразу после этого протестируйте изменения на случай, если вам потребуется откат. Будьте особенно осторожны и протестируйте первый запрос очень хорошо, если вы используете i18n ... Запустите первый запрос, чтобы показать, что будет удалено, и второй, чтобы фактически удалить.

--Show records to be deleted:
SELECT r.rid, r.language, r.source, r.redirect
  FROM redirect r INNER JOIN url_alias u ON r.source = u.alias
         AND r.redirect = u.source AND r.language = u.language;

--Delete redirects shown in above query:    
DELETE r FROM redirect r INNER JOIN url_alias u ON r.source = u.alias
         AND r.redirect = u.source AND r.language = u.language;

Если вы не знаете, как применять исправления или выполнять SQL-запросы, вам необходимо решить проблему вручную. Не волнуйтесь, это на самом деле довольно легко сделать (но по сравнению с другими методами это занимает больше времени):

Ручной метод:

Для каждой страницы, где отображается предупреждение:

  1. Редактировать страницу
  2. Прокрутите до конца формы редактирования
  3. Обратите внимание на основной URL страницы. Он отображается под «настройками пути URL», например, «Псевдоним: компания» будет означать, что URL страницы - «компания». Вы можете нажать «Настройки пути URL», чтобы посетить его раздел и подтвердить псевдоним URL, если вы не уверены.
  4. Теперь нажмите «URL перенаправления». Будут показаны перенаправления на текущую страницу. Будет как минимум одно перенаправление, совпадающее с псевдонимом URL, который вы указали на шаге 3. Возможно, более одного перенаправления в этом списке будет соответствовать псевдониму URL.
  5. Удалите все перенаправления, которые совпадают с псевдонимом URL. Это данные о проблеме, которые вызывают появление цикла и сообщения об ошибке.
  6. Если в разделе «Перенаправления URL-адресов» больше нет перенаправлений, точно совпадающих с псевдонимом URL-адреса проблемной страницы в настройках пути URL-адреса, сообщение об ошибке исчезнет.

хорошо работающий метод SQL! ТНХ
rémy

Патч для перенаправления почти готов к выпуску. Просто подумал, что упомяну это.
Альфред Армстронг

1

Если у нас одинаковые перенаправления к псевдониму узла, другой способ исправить эту ошибку - запустить скрипт, который проходит через все nid (в случае узлов), и посмотреть, имеет ли псевдоним каждого узла перенаправление с тем же именем, если таковое имеется. устранено.

for ($i=1; $i<=10000; $i++) {
  $alias = drupal_get_path_alias("node/" . $i);
  $redirect = redirect_load_by_source($alias);
  if ($redireccion->rid> 0) {
    redirect_page_cache_clear($redirect);
    redirect_delete($redireccion->rid);
  }
}

Вы можете запустить этот код в пункте «Выполнить код PHP» в меню разработки.

Эта форма похожа на «Метод SQL», только я выполняю это из Drupal, а не в базе данных.


Это сработало отлично!
Альбертски


0

Создать скрипт Drush:

<?php
// Set up the query using the database API
$query = db_select('redirect', 'r');
$query->join('url_alias', 'ua', 'r.redirect = ua.source AND r.source = ua.alias');
$query->fields('r', array('rid', 'redirect', 'source'));

// Execute it and fetch the results, one by one
$result = $query->execute();
$any_results = FALSE;
while($r = $result->fetchAssoc()) {
  // For each result, flag we've got at least one result, notify the CLI user
  // of what we're doing, and delete it using Redirect's own API
  $any_results = TRUE;
  drush_log(dt("Deleting unwanted redirect !r (!s -> !t)",
    array("!r" => $r['rid'], "!s" => $r['source'], "!t" => $r['redirect'])), "success");
  redirect_delete($r['rid']);
}

// No results? Report if that's the case
if (!$any_results) {
  drush_log(dt("Nothing to delete!"), "ok");
}

Сохраните его в файл и запустите изнутри кодовой базы вашего сайта drush php-script [PATH_TO_SCRIPT], и он удалит все перенаправления, которые конфликтуют с псевдонимами URL.


0

Как можно предотвратить отображение сообщения об ошибке «цикл перенаправления» на производственном сервере в будущем? Я уже установил сообщение об ошибке "нет" на этой странице - admin / config / development / logging


-2

Единственный способ после многих исправлений - открыть файл redirect.module и пропустить строку # 989.

drupal_set_message('Oops, looks like this request tried to create an infinite loop. We do not allow such things here. We are a professional website!');

1
Таким образом, вместо того, чтобы исправить бесконечный цикл перенаправления, вы просто пропустили предупреждение?
Джордж

1
Хотя я занимался этим в детстве (до того, как научился кодировать), я не рекомендую заниматься этим профессионально. Вы не только не решаете проблему, вы скрываете единственный признак того, что что-то не так!
Колан

-2

Мой английский не очень хороший, но я думаю, что вы не проблема, читайте меня. Я имел до этой проблемы, и я решил ее, поэтому я удалил модуль REDIRECT. С уважением, сайт KoZnaZna Team - Simon


1
Удаление модуля Redirect не поможет вам, если вам потребуются его функции.
Колан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.