El alias de ruta crea un bucle de redireccionamiento o redirige a la página principal

11

Cuando llamo a nuestro sitio "www.example.com/contact-us" obtengo el siguiente error:

Vaya, parece que esta solicitud intentó crear un bucle infinito. No permitimos tales cosas aquí. Somos un sitio web profesional!

Si llamo al sitio con "www.example.com/node/5", la página de contacto se muestra muy bien.

Cuando verifico el alias de ruta en / admin / config / search / path / edit / 6, la ruta del sistema y el alias están configurados correctamente.

Existe otro problema para otro alias, cuando llamo "www.example.com/staff" me redirigen a la página de inicio "www.example.com". Una vez más, el alias está configurado correctamente.

Estamos utilizando Drupal 7 y los módulos i18n_redirect y redirect.

Matías
fuente
Supongo que lo encontré: en "www.example.com/admin/config/search/redirect" había entradas que redirigían esas URL. Sin embargo, no sé cómo llegaron allí ...
Matthias

Respuestas:

19

Edite su página y vaya a redirecciones de URL . Encuentre la ruta de redireccionamiento con el mayor número de conteos y elimínela. Haga clic en guardar y luego vea la página.

Avísame si eso solucionó tu problema

Ryan G
fuente
Tengo un problema similar y, aunque esto soluciona las cosas para los nodos individuales, estoy tratando de averiguar qué lo causa en primer lugar para que esto no ocurra.
Oro
8

Actualización: el problema Drupal # 1796596 se cometió a partir de Redirect 1.0-rc2 (junio de 2015). La solución correcta para este problema ahora es actualizar a la última versión estable del módulo Redirect y luego ejecutar actualizaciones de la base de datos. Cualquier redirección circular que tenga se limpiará de forma segura.

Este problema se produjo debido a un error en el módulo de redireccionamiento. Lo activa cambiando la URL de una página (o tal vez solo su título, si está usando pathauto) y luego volviéndola a cambiar a lo que solía ser.

Por ejemplo, supongamos que tenía una página llamada "empresa" y cambié el título a "Nuestra empresa" (que cambió el alias de URL a nuestra empresa). Entonces decidí que en realidad lo prefería de la primera manera, así que edito el nodo nuevamente y cambio el título nuevamente a "Compañía". En ese momento, el mensaje de error " Vaya, parece que esta solicitud intentó crear un bucle infinito. No permitimos tales cosas aquí. ¡Somos un sitio web profesional! " Comenzaría a aparecer en la página de la Compañía.

Hay tres formas de solucionar esto, dependiendo de lo que sea más fácil para usted. Se extienden en dificultad / valentía de arriba a abajo.

El método Drupal / PHP

Hay un error largo de Drupal sobre el tema: Problema # 1796596 y hay un buen parche de trabajo que soluciona el problema en el comentario # 124 .

Con suerte, esta solución pronto se comprometerá en el módulo Redirect para descargar. Sin embargo, ha pasado más de un año sin signos de progreso en ese frente.

El método SQL

La solución más rápida para el problema es con una consulta SQL a la base de datos, con algo como a continuación. TENGA CUIDADO y solo pruebe este método si sabe lo que está haciendo: pruébelo primero en una copia de desarrollo del sitio y asegúrese de tener una copia de seguridad y pruebe los cambios inmediatamente después en caso de que necesite retroceder. Tenga mucho cuidado y pruebe bien la primera consulta si está usando i18n ... Ejecute la primera consulta para mostrar qué se eliminaría y la segunda para eliminarla.

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

Si no sabe cómo aplicar parches o ejecutar consultas SQL, debe solucionar el problema manualmente. No se preocupe, esto es bastante fácil de hacer (pero consume mucho tiempo en comparación con los otros métodos):

El método manual:

Para cada una de las páginas donde se muestra el mensaje de advertencia:

  1. Edita la página
  2. Desplácese hasta la parte inferior del formulario de edición
  3. Tenga en cuenta la URL principal de la página. Se muestra debajo de "Configuración de ruta de URL", por ejemplo, "Alias: empresa" significa que la URL de la página es "empresa". Puede hacer clic en "Configuración de ruta de URL" para visitar su sección y confirmar el alias de URL si no está seguro.
  4. Ahora haga clic en "redireccionamientos de URL". Se mostrarán los redireccionamientos a la página actual. Habrá al menos un redireccionamiento que sea el mismo que el alias de URL que anotó en el paso 3. Es posible que más de un redireccionamiento en esta lista coincida con el alias de URL.
  5. Elimine todos los redireccionamientos que sean iguales al alias de URL. Estos son los datos del problema que están causando que se muestre el bucle y el mensaje de error.
  6. Una vez que no haya más redireccionamientos en "redireccionamientos de URL" que coincidan exactamente con el alias de URL de la página del problema en la configuración de la ruta de URL, el mensaje de error desaparecerá.
El profesor Falken
fuente
buen método de trabajo SQL! thx
rémy
El parche para redirigir está casi listo para su lanzamiento. Solo pensé en mencionarlo.
Alfred Armstrong
1

Si tenemos los mismos redireccionamientos al alias del nodo, otra forma de corregir este error es ejecutar un script que atraviese todo el nid (en el caso de los nodos) y ver si el alias de cada nodo tiene una redirección con el mismo nombre, si corresponde. está eliminado.

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

Puede ejecutar este código en la opción "Ejecutar código PHP" del menú de desarrollo.

Este formulario es similar a "El método SQL", solo ejecuto esto desde Drupal y no en la base de datos.

Alfredo Valdivieso
fuente
Esto funcionó perfectamente!
albertski
0

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

Guárdelo en un archivo y ejecútelo desde la base de código de su sitio utilizando drush php-script [PATH_TO_SCRIPT], y eliminará cualquier redireccionamiento que choque con los alias de URL.

Vyacheslav Trotsak
fuente
0

¿Cómo puedo evitar mostrar el mensaje de error "bucle de redireccionamiento" en el servidor de producción en el futuro? Ya configuré el informe de errores "ninguno" en esta página - admin / config / development / logging

Jose D Jo
fuente
-2

La única forma después de probar muchos parches fue abrir el archivo redirect.module y omitir la línea # 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!');
Gaperville
fuente
1
Entonces, en lugar de arreglar el bucle de redireccionamiento infinito, ¿acabas de omitir la advertencia?
George
1
Aunque hice este tipo de cosas cuando era niño (antes de saber cómo codificar), no recomiendo hacerlo en ninguna capacidad profesional. ¡No solo no estás resolviendo el problema, sino que estás ocultando el único indicador de que algo está mal!
colan
-2

Mi inglés no es muy bueno, pero creo que no hay problema en leerme. Tengo ese problema antes y lo resolví, así que eliminé el módulo REDIRECT. Saludos KoZnaZna sitio Equipo - Simon

Koznazna Sajt
fuente
1
Eliminar el módulo Redirect no lo ayudará si necesita sus funciones.
colan