Lorsque j'appelle notre sit "www.example.com/contact-us", j'obtiens l'erreur suivante:
Oups, on dirait que cette requête a essayé de créer une boucle infinie. Nous n'autorisons pas de telles choses ici. Nous sommes un site professionnel!
Si j'appelle le site avec "www.example.com/node/5", la page de contact s'affiche très bien.
Lorsque je vérifie l'alias du chemin dans/admin/config/search/path/edit/6, le chemin du système et l'alias sont correctement définis.
Un autre problème existe pour un autre alias, lorsque j'appelle "www.example.com/staff", je suis redirigé vers la page de destination "www.example.com". Encore une fois, l'alias est correctement défini.
Nous utilisons Drupal 7, et les modules i18n_redirect et redirect.
Modifiez votre page et accédez à RL de redirection. Trouvez le chemin de redirection avec le plus grand nombre de comptes et supprimez-le. Cliquez sur enregistrer puis affichez la page.
Faites-moi savoir si cela a résolu votre problème
Mise à jour: Drupal # 1796596 a été validé à partir de la redirection 1.0-rc2 (juin 2015). La solution correcte à ce problème est maintenant de passer à la dernière version stable du module de redirection, puis d'exécuter les mises à jour de la base de données. Toutes les redirections circulaires que vous avez seront nettoyées en toute sécurité.
Ce problème est dû à un bogue dans le module de redirection. Vous le déclenchez en changeant l'URL d'une page (ou peut-être simplement son titre, si vous utilisez pathauto), puis en la remettant à ce qu'elle était.
Par exemple, supposons que j'avais une page intitulée "entreprise" et que j'ai changé le titre en "Notre entreprise" (qui a changé l'alias d'URL en notre-entreprise). Ensuite, j'ai décidé que je préférais vraiment la première façon, donc je modifie à nouveau le nœud et change le titre en "Société". À ce stade, le message d'erreur " Oups, on dirait que cette demande a essayé de créer une boucle infinie. Nous n'autorisons pas de telles choses ici. Nous sommes un site Web professionnel ! "commencerait à apparaître sur la page Entreprise.
Il existe trois façons de résoudre ce problème, selon ce qui est le plus simple pour vous. Ils varient en difficulté/bravoure de haut en bas.
La méthode Drupal/PHP
Il y a un long Drupal bug sur le sujet: Issue # 1796596 et il y a un bon patch qui résout le problème dans le commentaire # 124 .
Espérons que ce correctif sera bientôt enregistré dans le module de redirection pour téléchargement. Cependant, cela fait plus d'un an maintenant sans aucun signe de progrès sur ce front.
La méthode SQL
La solution la plus rapide pour le problème est une requête SQL vers la base de données, avec quelque chose comme ci-dessous. ATTENTION et n'essayez cette méthode que si vous savez ce que vous faites - essayez-la d'abord sur une copie de développement du site et assurez-vous d'avoir un sauvegarder et tester les modifications juste après au cas où vous auriez besoin de revenir en arrière. Soyez très prudent et testez très bien la première requête si vous utilisez i18n ... Exécutez la première requête pour afficher ce qui serait supprimé et la seconde pour réellement supprimer.
--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 vous ne savez pas comment appliquer des correctifs ou exécuter des requêtes SQL, vous devez résoudre le problème manuellement. Ne vous inquiétez pas, cela est en fait assez facile à faire (mais prend du temps par rapport aux autres méthodes):
La méthode manuelle:
Pour chacune des pages où le message d'avertissement s'affiche:
Si nous avons les mêmes redirecs vers l'alias du nœud, une autre façon de corriger cette erreur est d'exécuter un script qui traverse tout le nid (dans le cas des nœuds) et de voir si l'alias de chaque nœud a une redirection avec le même nom, le cas échéant est éliminé.
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);
}
}
Vous pouvez exécuter ce code dans l'option "Exécuter PHP Code" du menu de développement.
Ce formulaire est similaire à "La méthode SQL", je l'exécute à partir de Drupal et non sur la base de données.
Créer un 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");
}
Enregistrez-le dans un fichier et exécutez-le à partir de la base de code de votre site à l'aide de drush php-script [PATH_TO_SCRIPT]
, et il supprimera toutes les redirections en conflit avec les alias d'URL.
Comment puis-je empêcher l'affichage du message d'erreur "boucle de redirection" dans le serveur de production à l'avenir? J'ai déjà défini le rapport d'erreur "aucun" sur cette page - admin/config/development/logging
Appliquez le patch sur Corrigez et empêchez les redirections circulaires (ou attendez qu'il arrive dans le module).