O alias do caminho cria um loop de redirecionamento ou redireciona para a primeira página

11

Quando eu chamo nosso site "www.example.com/contact-us", estou recebendo o seguinte erro:

Ops, parece que essa solicitação tentou criar um loop infinito. Não permitimos essas coisas aqui. Somos um site profissional!

Se eu ligar para o site com "www.example.com/node/5", a página de contato será exibida corretamente.

Quando verifico o alias do caminho em / admin / config / search / path / edit / 6, o caminho e o alias do sistema estão definidos corretamente.

Existe outro problema para outro alias, quando chamo "www.example.com/staff" e estou sendo redirecionado para a página de destino "www.example.com". Mais uma vez o alias está definido corretamente.

Estamos usando o Drupal 7 e os módulos i18n_redirect e redirecionar.

Matthias
fonte
Acho que o encontrei: em "www.example.com/admin/config/search/redirect" havia entradas redirecionando esses URLs. Não sei como eles chegaram lá ...
Matthias

Respostas:

19

Edite sua página e acesse redirecionamentos de URL . Encontre o caminho de redirecionamento com o maior número de contagens e exclua-o. Clique em Salvar e visualize a página.

Deixe-me saber se isso resolveu o seu problema

Ryan G
fonte
Estou tendo um problema semelhante e, enquanto isso corrige coisas para nós individuais, estou tentando descobrir o que causa isso em primeiro lugar, para que isso não ocorra no começo.
Ouro
8

Atualização: o problema Drupal # 1796596 foi confirmado a partir do redirecionamento 1.0-rc2 (junho de 2015). A solução correta para esse problema agora é atualizar para a versão estável mais recente do módulo Redirect e executar as atualizações do banco de dados. Quaisquer redirecionamentos circulares que você tiver serão limpos com segurança.

Esse problema ocorreu devido a um erro no módulo de redirecionamento. Você o aciona alterando o URL de uma página (ou talvez apenas o título, se estiver usando o pathauto) e depois alterando-o para o que costumava ser.

Por exemplo, digamos que eu tinha uma página chamada "empresa" e alterei o título para "Nossa empresa" (que alterou o alias do URL para nossa empresa). Então decidi que realmente preferia a primeira maneira, então editei o nó novamente e alterei o título novamente para "Empresa". Nesse momento, a mensagem de erro " Ops, parece que essa solicitação tentou criar um loop infinito. Não permitimos isso aqui. Somos um site profissional! " Começaria a aparecer na página da empresa.

Existem três maneiras de corrigir isso, dependendo do que for mais fácil para você. Eles variam em dificuldade / bravura de cima para baixo.

O método Drupal / PHP

Há um longo bug do Drupal sobre o assunto: Edição nº 1796596 e há um bom patch de trabalho que corrige o problema no comentário # 124 .

Esperamos que esta correção seja confirmada em breve no módulo Redirecionar para download. No entanto, já faz mais de um ano, sem nenhum sinal de progresso nessa frente.

O método SQL

A correção mais rápida para o problema é com uma consulta SQL ao banco de dados, com algo como abaixo. TENHA CUIDADO e tente apenas esse método se você souber o que está fazendo - tente primeiro uma cópia de desenvolvimento do site e verifique se você tem um backup e teste as alterações logo depois, caso precise reverter. Seja extremamente cuidadoso e teste a primeira consulta muito bem se você estiver usando o i18n ... Execute a primeira consulta para mostrar o que seria excluído e a segunda para realmente excluir.

--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 você não sabe aplicar patches ou executar consultas SQL, precisará corrigir o problema manualmente. Não se preocupe, isso é realmente muito fácil de fazer (mas demorado em comparação com outros métodos):

O método manual:

Para cada uma das páginas em que a mensagem de aviso foi exibida:

  1. Edite a página
  2. Role até a parte inferior do formulário de edição
  3. Anote o URL principal da página. É mostrado abaixo de "Configurações do caminho do URL", por exemplo, "Alias: empresa" significaria que o URL da página é "empresa". Você pode clicar em "Configurações do caminho do URL" para visitar sua seção e confirmar o alias do URL, se não tiver certeza.
  4. Agora clique em "URL redireciona". Os redirecionamentos para a página atual serão mostrados. Haverá pelo menos um redirecionamento igual ao alias do URL que você anotou na etapa 3. É possível que mais de um redirecionamento nesta lista corresponda ao alias do URL.
  5. Exclua todos os redirecionamentos iguais ao alias da URL. Esses são os dados do problema que estão causando o loop e a mensagem de erro a ser exibida.
  6. Quando não houver mais redirecionamentos em "URL redirecionados" que correspondam exatamente ao alias de URL da página do problema nas configurações do caminho da URL, a mensagem de erro desaparecerá.
Professor Falken
fonte
bom método SQL de trabalho! thx
rémy 22/03
O patch para redirecionar está quase pronto para lançamento. Só pensei em mencionar.
Alfred Armstrong
1

Se tivermos os mesmos redirecionamentos para o alias do nó, outra maneira de corrigir esse erro é executar um script através de todo o nid (no caso de nós) e ver se o alias de cada nó tem um redirecionamento com o mesmo nome, se houver é 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);
  }
}

Você pode executar esse código na opção "Executar código PHP" no menu de desenvolvimento.

Este formulário é semelhante ao "O método SQL", apenas eu o executo no Drupal e não no banco de dados.

Alfredo Valdivieso
fonte
Isso funcionou perfeitamente!
Albertski 21/05
0

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

Salve-o em um arquivo e execute-o na base de código do seu site usando drush php-script [PATH_TO_SCRIPT], e ele excluirá qualquer redirecionamento que colidir com os aliases de URL.

Vyacheslav Trotsak
fonte
0

Como impedir a exibição futura da mensagem de erro "loop de redirecionamento" no servidor de produção? Eu já defini o relatório de erros "none" nesta página - admin / config / development / logging

Jose D Jo
fonte
-2

A única maneira de tentar muitos patches foi abrir o arquivo redirect.module e omitir a linha # 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
fonte
1
Então, em vez de corrigir o loop de redirecionamento infinito, você simplesmente omitiu o aviso?
George George
1
Embora eu tenha feito esse tipo de coisa quando criança (antes de saber codificar), não recomendo fazer isso em nenhuma capacidade profissional. Não apenas você não está resolvendo o problema, como também está ocultando o único indicador de que algo está errado!
colan
-2

Meu inglês não é muito bom, mas acho que você não tem problema em me ler. Eu tenho antes desse problema e o resolvi, então removi o módulo REDIRECT. Atenciosamente Equipe KoZnaZna - Simon

Koznazna Sajt
fonte
1
A remoção do módulo Redirecionar não ajudará se você precisar de seus recursos.
colan