it-swarm.com.de

Der Pfadalias erstellt eine Umleitungsschleife oder leitet zur Startseite weiter

Wenn ich unseren Sitz "www.example.com/contact-us" nenne, wird folgende Fehlermeldung angezeigt:

Hoppla, es sieht so aus, als hätte diese Anfrage versucht, eine Endlosschleife zu erstellen. Wir erlauben solche Dinge hier nicht. Wir sind eine professionelle Website!

Wenn ich die Site mit "www.example.com/node/5" anrufe, wird die Kontaktseite einwandfrei angezeigt.

Wenn ich den Pfadalias unter/admin/config/search/path/edit/6 überprüfe, werden Systempfad und Alias ​​korrekt festgelegt.

Ein anderes Problem besteht für einen anderen Alias, wenn ich "www.example.com/staff" anrufe und auf die Zielseite "www.example.com" weitergeleitet werde. Der Alias ​​ist wieder richtig eingestellt.

Wir verwenden Drupal 7 und die Module i18n_redirect und redirect).

11
Matthias

Bearbeiten Sie Ihre Seite und gehen Sie zu RL-Weiterleitungen. Suchen Sie den Umleitungspfad mit der höchsten Anzahl und löschen Sie ihn. Klicken Sie auf Speichern und zeigen Sie die Seite an.

Lassen Sie mich wissen, ob dies Ihr Problem behoben hat

19
Ryan G

Update: Drupal Problem # 1796596 wurde ab Redirect 1.0-rc2 (Juni 2015) festgeschrieben. Die richtige Lösung für dieses Problem Jetzt müssen Sie auf die neueste stabile Version des Redirect-Moduls aktualisieren und dann Datenbankaktualisierungen ausführen. Alle zirkulären Weiterleitungen, die Sie haben, werden sicher bereinigt.

Dieses Problem trat aufgrund eines Fehlers im Umleitungsmodul auf. Sie lösen es aus, indem Sie die URL einer Seite (oder nur den Titel, wenn Sie pathauto verwenden) ändern und sie dann wieder in den ursprünglichen Zustand zurückversetzen.

Angenommen, ich hatte eine Seite mit dem Namen "Firma" und habe den Titel in "Unsere Firma" geändert (wodurch der URL-Alias ​​in "Unsere Firma" geändert wurde). Dann habe ich beschlossen, dass ich es tatsächlich als erstes bevorzugt habe, also bearbeite ich den Knoten erneut und ändere den Titel wieder in "Firma". An diesem Punkt erscheint die Fehlermeldung " Ups, diese Anfrage hat versucht, eine Endlosschleife zu erstellen. Wir erlauben solche Dinge hier nicht. Wir sind eine professionelle Website ! "wird auf der Unternehmensseite angezeigt.

Es gibt drei Möglichkeiten, dies zu beheben, je nachdem, was für Sie am einfachsten ist. Sie variieren in Schwierigkeitsgrad/Tapferkeit von oben nach unten.

Die Drupal/PHP-Methode

Es gibt einen langen Fehler Drupal Fehler zu diesem Thema: Problem # 1796596 und es gibt einen gut funktionierenden Patch, der das Problem im Kommentar # 124 behebt .

Hoffentlich wird dieses Update bald im Redirect-Modul zum Download bereitgestellt. Allerdings ist es jetzt über ein Jahr her, ohne dass diesbezüglich Fortschritte zu verzeichnen sind.

Die SQL-Methode

Die schnellste Lösung für das Problem ist eine SQL-Abfrage an die Datenbank. Seien Sie vorsichtig und probieren Sie diese Methode nur aus, wenn Sie wissen, was Sie tun. Probieren Sie sie zuerst auf einer Entwicklungskopie der Site aus und stellen Sie sicher, dass Sie eine haben Sichern und testen Sie die Änderungen direkt danach, falls Sie ein Rollback durchführen müssen. Seien Sie besonders vorsichtig und testen Sie die erste Abfrage besonders gut, wenn Sie i18n verwenden ... Führen Sie die erste Abfrage aus, um anzuzeigen, was gelöscht werden soll, und die zweite, um das Löschen tatsächlich durchzuführen.

--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;

Wenn Sie nicht wissen, wie Patches angewendet oder SQL-Abfragen ausgeführt werden sollen, müssen Sie das Problem manuell beheben. Keine Sorge, das ist eigentlich ganz einfach (aber im Vergleich zu den anderen Methoden zeitaufwändig):

Die manuelle Methode:

Für jede der Seiten, auf denen die Warnmeldung angezeigt wurde:

  1. Bearbeiten Sie die Seite
  2. Scrollen Sie zum Ende des Bearbeitungsformulars
  3. Notieren Sie die Haupt-URL der Seite. Es wird unter "URL-Pfadeinstellungen" angezeigt, z. "Alias: Firma" würde bedeuten, dass die URL der Seite "Firma" ist. Sie können auf "URL-Pfadeinstellungen" klicken, um den entsprechenden Abschnitt aufzurufen und den URL-Alias ​​zu bestätigen, wenn Sie sich nicht sicher sind.
  4. Klicken Sie nun auf "URL-Weiterleitungen". Die Weiterleitungen zur aktuellen Seite werden angezeigt. Es gibt mindestens eine Weiterleitung, die mit dem in Schritt 3 angegebenen URL-Alias ​​übereinstimmt. Es ist möglich, dass mehr als eine Weiterleitung in dieser Liste mit dem URL-Alias ​​übereinstimmt.
  5. Löschen Sie alle Weiterleitungen, die mit dem URL-Alias ​​identisch sind. Dies sind die Problemdaten, die dazu führen, dass die Schleife und die Fehlermeldung angezeigt werden.
  6. Sobald unter "URL-Weiterleitungen" keine Weiterleitungen mehr vorhanden sind, die genau mit dem URL-Alias ​​der Problemseite unter den URL-Pfadeinstellungen übereinstimmen, wird die Fehlermeldung gelöscht.
8

Wenn wir dieselben Umleitungen zum Alias ​​des Knotens haben, können Sie diesen Fehler auch beheben, indem Sie ein Skript ausführen, das alle NIDs (bei Knoten) durchläuft und überprüft, ob der Alias ​​jedes Knotens eine Umleitung mit demselben Namen hat, falls vorhanden wird beseitigt.

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);
  }
}

Sie können diesen Code in der Option "Execute PHP Code" "aus dem Entwicklungsmenü ausführen.

Dieses Formular ähnelt der "SQL-Methode", nur dass ich dies von Drupal und nicht in der Datenbank) ausführe.

1

Drush-Skript erstellen:

<?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");
}

Speichern Sie es in einer Datei und führen Sie es mit drush php-script [PATH_TO_SCRIPT] Aus der Codebasis Ihrer Site aus. Dadurch werden alle Weiterleitungen gelöscht, die mit den URL-Aliasen in Konflikt stehen.

0

Wie kann ich verhindern, dass in Zukunft die Fehlermeldung "Umleitungsschleife" auf dem Produktionsserver angezeigt wird? Ich habe auf dieser Seite bereits die Fehlermeldung "Keine" festgelegt - admin/config/development/logging

0
Jose D Jo

Wenden Sie den Patch bei an. Korrigieren und verhindern Sie zirkuläre Weiterleitungen (oder warten Sie, bis er in das Modul gelangt).

0
colan