路径别名创建重定向循环或重定向到首页


11

当我将坐姿称为“ www.example.com/contact-us”时,出现以下错误:

糟糕,此请求尝试创建一个无限循环。我们在这里不允许这样的事情。我们是一个专业的网站!

如果我用“ www.example.com/node/5”呼叫该站点,则可以很好地显示联系页面。

当我在/ admin / config / search / path / edit / 6上检查路径别名时,系统路径和别名已正确设置。

当我调用“ www.example.com/staff”时,另一个别名存在另一个问题,我将重定向到登录页面“ www.example.com”。再次正确设置别名。

我们正在使用Drupal 7以及i18n_redirect和redirect模块。


我想我找到了:在“ www.example.com/admin/config/search/redirect”中,有条目重定向这些URL。我不知道他们是怎么到达那里的……
Matthias 2013年

Answers:


19

编辑页面并转到URL重定向。找到计数最多的重定向路径并将其删除。单击保存,然后查看页面。

让我知道这是否解决了您的问题


我遇到了一个类似的问题,尽管这可以修复各个节点的问题,但我想首先弄清楚是什么原因造成的,所以从一开始就不会发生这种情况。
黄金

8

更新: 自重定向1.0-rc2(2015年6月)起,Drupal问题#1796596已提交。现在,针对此问题的正确解决方案是升级到重定向模块的最新稳定版本,然后运行数据库更新。您拥有的所有循环重定向都将被安全清除。

发生此问题是由于重定向模块中的错误。您可以通过更改页面的URL(或者,如果使用pathauto,也可以只是页面的标题)来触发它,然后将其更改回原来的样子。

例如,假设我有一个名为“ company”的页面,并且将标题更改为“ Our company”(将URL别名更改为our-company)。然后,我决定我实际上是首选第一种方式,因此我再次编辑该节点并将标题更改回“公司”。到那时,错误消息“ 糟糕,看起来此请求试图创建一个无限循环。我们在这里不允许这样做。我们是一个专业网站! ”将开始在“公司”页面上显示。

有三种解决方法,具体取决于您最轻松的选择。他们的难度/勇敢程度从上到下。

Drupal / PHP方法

关于这个主题,有一个很长的Drupal错误:问题#1796596,并且有一个很好的工作补丁可以解决注释#124中的问题。

希望此修复程序很快会提交到“重定向”模块中以供下载。但是,已经过去一年多了,在这方面没有任何进展的迹象。

SQL方法

解决该问题的最快方法是对数据库进行SQL查询,如下所示。 请务必谨慎,只有在您知道自己在做什么的情况下,才尝试使用此方法-首先在网站的开发副本上进行尝试,并确保您有备份,然后再测试更改,以防万一您需要回滚。如果您使用的是i18n,请格外小心,并更好地测试第一个查询。运行第一个查询以显示将要删除的内容,第二个查询实际执行删除操作。

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

如果您不知道如何应用补丁程序或运行SQL查询,则需要手动解决问题。不用担心,这实际上很容易做到(但是与其他方法相比比较耗时):

手动方法:

对于显示警告消息的每个页面:

  1. 编辑页面
  2. 滚动到编辑表单的底部
  3. 注意页面的主要URL。显示在“ URL路径设置”下方,例如“别名:公司”表示页面的URL为“公司”。您可以单击“ URL路径设置”以访问其部分,如果不确定,请确认URL别名。
  4. 现在,单击“ URL重定向”。将显示到当前页面的重定向。至少有一个重定向与您在步骤3中记下的URL别名相同。此列表中可能有多个重定向与URL别名匹配。
  5. 删除所有与URL别名相同的重定向。这些是导致循环和错误消息显示的问题数据。
  6. 一旦在“ URL重定向”下不再有与URL路径设置下的问题页面的URL别名完全匹配的重定向,该错误消息就会消失。

良好的SQL方法!THX
雷米

重定向的补丁几乎可以发布了。只是以为我会提到它。
Alfred Armstrong

1

如果我们对节点的别名具有相同的重定向,则解决此错误的另一种方法是运行一个通过所有nid(对于节点而言)的脚本,并查看每个节点的别名是否具有相同名称的重定向(如果有)被淘汰。

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

您可以在开发菜单的“执行PHP代码”选项中运行此代码。

这种形式类似于“ SQL方法”,只是我从Drupal而不是在数据库上执行。


这很好用!
albertski


0

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

将其保存到文件中,然后使用从您的站点的代码库中运行drush php-script [PATH_TO_SCRIPT],它将删除所有与URL别名冲突的重定向。


0

将来如何防止在生产服务器中显示“重定向循环”错误消息?我已经在此页面中将错误报告设置为“无”-admin / config / development / logging


-2

尝试了许多修补后,唯一的方法是打开redirect.module文件并省略行#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
因此,除了固定无限重定向循环之外,您还只是省略了警告?
乔治,

1
尽管我小时候就做过这样的事情(在我不知道如何编码之前),但我不建议以任何专业能力来这样做。您不仅无法解决问题,而且还隐藏着唯一的错误迹象!
科兰2014年

-2

我的英语不是很好,但是我想你读我没问题。我遇到了那个问题,并且已经解决了,所以我删除了REDIRECT模块。问候KoZnaZna网站小组-Simon


1
如果需要重定向功能,则删除重定向模块将无济于事。
科兰2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.