Der Pfadalias erstellt eine Umleitungsschleife oder leitet zur Startseite weiter


11

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 sowie die Module i18n_redirect und redirect.


Ich glaube, ich habe es gefunden: In "www.example.com/admin/config/search/redirect" gab es Einträge, die diese URLs umleiteten. Ich weiß nicht, wie sie dorthin gekommen sind ...
Matthias

Antworten:


19

Bearbeiten Sie Ihre Seite und gehen Sie zu URL-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


Ich habe ein ähnliches Problem, und während dies die Probleme für einzelne Knoten behebt, versuche ich herauszufinden, was es überhaupt verursacht, damit dies zunächst nicht auftritt.
Gold

8

Update: Drupal-Problem Nr. 1796596 wurde ab Redirect 1.0-rc2 (Juni 2015) festgeschrieben. Die richtige Lösung für dieses Problem besteht nun darin, auf die neueste stabile Version des Redirect-Moduls zu aktualisieren und anschließend Datenbankaktualisierungen auszuführen. Alle kreisförmigen 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". Zu diesem Zeitpunkt wird die Fehlermeldung " Ups, 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! " 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 Drupal-Fehler zu diesem Thema: Problem Nr. 1796596 und es gibt einen gut funktionierenden Patch, der das Problem in Kommentar Nr. 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, stellen Sie sicher, dass Sie ein Backup haben, 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. B. "Alias: Firma" bedeutet, dass die URL der Seite "Firma" lautet. 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.

gut funktionierende SQL-Methode! thx
rémy

Der Patch, der umgeleitet werden soll, ist fast zur Veröffentlichung bereit. Ich dachte nur, ich würde es erwähnen.
Alfred Armstrong

1

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 "PHP-Code ausführen" im Entwicklungsmenü ausführen.

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


Das hat perfekt funktioniert!
Albertski


0

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 aus der Codebasis Ihrer Site mit aus. Dadurch werden drush php-script [PATH_TO_SCRIPT]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


-2

Der einzige Weg, nachdem Sie viele Patches ausprobiert hatten, bestand darin, die Datei redirect.module zu öffnen und Zeile 989 wegzulassen

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
Anstatt die Endlosumleitungsschleife zu reparieren, haben Sie die Warnung einfach weggelassen?
George

1
Obwohl ich so etwas gemacht habe, als ich ein Kind war (bevor ich wusste, wie man programmiert), empfehle ich nicht, dies in irgendeiner beruflichen Eigenschaft zu tun. Sie lösen nicht nur das Problem nicht, sondern verbergen auch den einzigen Indikator dafür, dass etwas nicht stimmt!
Colan

-2

Mein Englisch ist nicht sehr gut, aber ich denke du hast kein Problem mich zu lesen. Ich habe vor diesem Problem und ich habe es gelöst, also habe ich das Modul REDIRECT entfernt. Grüße KoZnaZna Seite Team - Simon


1
Das Entfernen des Redirect-Moduls hilft Ihnen nicht, wenn Sie dessen Funktionen benötigen.
Colan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.