Псевдонім шляху створює цикл переадресації або переадресацію на головну сторінку


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 та перенаправлення.


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

Відповіді:


19

Відредагуйте свою сторінку та перейдіть до URL-переспрямувань . Знайдіть шлях переспрямування з найбільшою кількістю підрахунків та видаліть його. Клацніть «Зберегти» та перегляньте сторінку

Дайте мені знати, чи це вирішило вашу проблему


У мене є аналогічна проблема, і хоча це виправляє речі для окремих вузлів, я намагаюся з’ясувати, що викликає це в першу чергу, щоб це не виникало для початку.
Золото

8

Оновлення: випуск Друпалу №1796596 розпочато станом на Redirect 1.0-rc2 (червень 2015 року). Правильне рішення цієї проблеми зараз - оновити до останнього стабільного випуску модуля Redirect, а потім запустити оновлення бази даних. Будь-які кругові переадресації у вас будуть безпечно очищені.

Ця проблема виникла через помилку в модулі переадресації. Ви запускаєте її, змінюючи URL-адресу сторінки (або, можливо, лише її назву, якщо ви використовуєте патавто), а потім змінюєте її назад на те, що раніше було.

Наприклад, скажімо, що у мене була сторінка під назвою "компанія", і я змінив назву на "Наша компанія" (яка змінила псевдонім URL на нашу компанію). Тоді я вирішив, що насправді вважаю за краще перший спосіб, щоб я знову відредагував вузол і змінив назву назад на "Компанія". У цей момент повідомлення про помилку " На жаль, цей запит намагався створити нескінченний цикл. Таких речей ми тут не дозволяємо. Ми є професійним веб-сайтом! ". Почне відображатися на сторінці компанії.

Існує три способи виправити це, залежно від того, що вам найлегше. Вони варіюються у складності / сміливості зверху вниз.

Метод Drupal / PHP

Існує довгий помилка Drupal на цю тему: Випуск № 1796596, і є хороший робочий патч, який виправляє проблему в коментарі №124 .

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

Метод 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! thx
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 - Саймон


1
Видалення модуля перенаправлення не допоможе вам, якщо вам потрібні його функції.
колан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.