L'alias del percorso crea un ciclo di reindirizzamento o reindirizza alla prima pagina


11

Quando chiamo il nostro sit "www.example.com/contact-us", visualizzo il seguente errore:

Oops, sembra che questa richiesta abbia cercato di creare un ciclo infinito. Non permettiamo queste cose qui. Siamo un sito web professionale!

Se chiamo il sito con "www.example.com/node/5" la pagina dei contatti viene visualizzata bene.

Quando controllo l'alias di percorso su / admin / config / search / path / edit / 6, il percorso di sistema e l'alias sono impostati correttamente.

Un altro problema esiste per un altro alias, quando chiamo "www.example.com/staff" Vengo reindirizzato alla pagina di destinazione "www.example.com". Ancora una volta l'alias è impostato correttamente.

Stiamo usando Drupal 7, i moduli i18n_redirect e reindirizzamento.


Immagino di averlo trovato: in "www.example.com/admin/config/search/redirect" c'erano voci che reindirizzavano quegli URL. Non so come siano arrivati ​​lì ...
Matthias,

Risposte:


19

Modifica la tua pagina e vai ai reindirizzamenti URL . Trova il percorso di reindirizzamento con il maggior numero di conteggi ed eliminalo. Fai clic su Salva, quindi visualizza la pagina.

Fammi sapere se questo ha risolto il tuo problema


Sto riscontrando un problema simile e, mentre questo risolve le cose per i singoli nodi, sto cercando di capire cosa lo causa in primo luogo, quindi non è necessario iniziare.
Oro,

8

Aggiornamento: il problema Drupal n. 1796596 è stato risolto a partire da Redirect 1.0-rc2 (giugno 2015). La soluzione corretta per questo problema ora è l'aggiornamento all'ultima versione stabile del modulo Redirect e quindi eseguire gli aggiornamenti del database. Eventuali reindirizzamenti circolari che hai verranno ripuliti in modo sicuro.

Questo problema è stato causato da un bug nel modulo di reindirizzamento. Lo attivi cambiando l'URL di una pagina (o forse solo il suo titolo, se stai usando pathauto) e poi cambiandolo di nuovo a quello che era.

Ad esempio, supponiamo di avere una pagina chiamata "company" e ho cambiato il titolo in "Our company" (che ha cambiato l'alias URL in our-company). Quindi ho deciso di preferirlo nel primo modo in modo da modificare nuovamente il nodo e cambiare il titolo in "Azienda". A quel punto il messaggio di errore " Spiacenti, sembra che questa richiesta abbia cercato di creare un ciclo infinito. Non consentiamo queste cose qui. Siamo un sito Web professionale! " Inizierebbe a comparire nella pagina dell'azienda.

Esistono tre modi per risolvere questo problema, a seconda di ciò che è più semplice per te. Esse variano in difficoltà / coraggio dall'alto verso il basso.

Il metodo Drupal / PHP

C'è un lungo bug di Drupal sull'argomento: problema n. 1796596 e c'è una buona patch funzionante che risolve il problema nel commento n . 124 .

Spero che questa correzione venga presto inserita nel modulo Redirect per il download. Tuttavia è passato più di un anno ormai senza alcun segno di progresso su questo fronte.

Il metodo SQL

La soluzione più rapida per il problema è con una query SQL nel database, con qualcosa di simile di seguito. ATTENZIONE e prova questo metodo solo se sai cosa stai facendo: provalo prima su una copia di sviluppo del sito e assicurati di avere un backup e verifica subito le modifiche nel caso in cui sia necessario eseguire il rollback. Fai molta attenzione e testa bene la prima query se stai usando i18n ... Esegui la prima query per mostrare cosa verrebbe eliminato e la seconda per fare effettivamente l'eliminazione.

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

Se non sai come applicare patch o eseguire query SQL, devi risolvere il problema manualmente. Non ti preoccupare, in realtà è abbastanza facile da fare (ma richiede molto tempo rispetto agli altri metodi):

Il metodo manuale:

Per ciascuna delle pagine in cui è visualizzato il messaggio di avviso:

  1. Modifica la pagina
  2. Scorri fino alla fine del modulo di modifica
  3. Nota l'URL principale della pagina. Viene visualizzato sotto "Impostazioni percorso URL", ad es. "Alias: company" significa che l'URL della pagina è "company". Puoi fare clic su "Impostazioni percorso URL" per visitare la sua sezione e confermare l'alias URL se non sei sicuro.
  4. Ora fai clic su "Reindirizzamenti URL". Verranno mostrati i reindirizzamenti alla pagina corrente. Ci sarà almeno un reindirizzamento uguale all'alias URL annotato nel passaggio 3. È possibile che più di un reindirizzamento in questo elenco corrisponda all'alias URL.
  5. Elimina tutti i reindirizzamenti uguali all'alias URL. Questi sono i dati del problema che causano la visualizzazione del ciclo e del messaggio di errore.
  6. Una volta che non ci sono più reindirizzamenti in "Reindirizzamenti URL" che corrispondono esattamente all'alias URL della pagina del problema nelle impostazioni del percorso URL, il messaggio di errore scompare.

buon metodo SQL funzionante! thx
rémy

La patch da reindirizzare è quasi pronta per il rilascio. Ho pensato di menzionarlo.
Alfred Armstrong,

1

Se abbiamo gli stessi redirecs all'alias del nodo, un altro modo per correggere questo errore è quello di eseguire uno script che attraversa tutti i nid (nel caso dei nodi) e vedere se l'alias di ciascun nodo ha un reindirizzamento con lo stesso nome, se presente è eliminato.

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

È possibile eseguire questo codice nell'opzione "Esegui codice PHP" dal menu di sviluppo.

Questo modulo è simile a "Il metodo SQL" solo che eseguo questo da Drupal e non sul database.


Questo ha funzionato perfettamente!
albertski,


0

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

Salvalo in un file ed eseguilo dall'interno della base di codice del tuo sito usando drush php-script [PATH_TO_SCRIPT], ed eliminerà tutti i reindirizzamenti che si scontrano con gli alias URL.


0

Come posso impedire in futuro la visualizzazione del messaggio di errore "ciclo di reindirizzamento" nel server di produzione? Ho già impostato l'errore di segnalazione "nessuno" in questa pagina - admin / config / development / logging


-2

L'unico modo dopo aver provato molte patch era aprire il file redirect.module e omettere la riga # 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
Quindi, invece di correggere il ciclo di reindirizzamento infinito hai appena omesso l'avviso?
George,

1
Anche se ho fatto questo genere di cose da bambino (prima di sapere come programmare), non consiglio di farlo a titolo professionale. Non solo non stai risolvendo il problema, stai nascondendo l'unico indicatore che qualcosa non va!
colan,

-2

Il mio inglese non è molto buono, ma penso che tu non abbia problemi a leggermi. Ho riscontrato questo problema e l'ho risolto, quindi ho rimosso il modulo REDIRECT. Saluti Team del sito KoZnaZna - Simon


1
La rimozione del modulo di reindirizzamento non ti aiuterà se ne avrai bisogno.
colan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.