경로 별명은 경로 재 지정 루프를 작성하거나 첫 페이지로 경로 재 지정


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

답변:


19

페이지를 수정하고 URL 리디렉션으로 이동하십시오 . 개수가 가장 많은 경로 재 지정 경로를 찾아 삭제하십시오. 저장을 클릭 한 다음 페이지를보십시오.

문제가 해결되었는지 알려주세요.


비슷한 문제가 발생하여 개별 노드의 문제가 해결되는 동안 처음에 발생하는 원인을 파악하려고 노력하고 있습니다.

8

업데이트 : Drupal 문제 # 1796596 은 Redirect 1.0-rc2 (2015 년 6 월)부터 커밋되었습니다. 이 문제에 대한 올바른 해결책은 이제 최신 안정적인 Redirect 모듈 릴리스로 업그레이드 한 다음 데이터베이스 업데이트를 실행하는 것입니다. 모든 순환 리디렉션은 안전하게 정리됩니다.

이 문제는 리디렉션 모듈의 버그로 인해 발생했습니다. 페이지의 URL (또는 pathauto를 사용하는 경우 제목 만)을 변경 한 다음 다시 원래 URL로 변경하여 트리거합니다.

예를 들어, "회사"라는 페이지가 있고 제목을 "회사"(URL 별칭을 회사로 변경)로 변경했다고 가정하겠습니다. 그런 다음 노드를 다시 편집하고 제목을 "회사"로 다시 변경하기 위해 실제로 첫 번째 방법을 선호하기로 결정했습니다. 이 시점에서 " 죄송합니다.이 요청으로 인해 무한 루프를 만들려고 한 것 같습니다. 여기서 허용하지 않습니다. 우리는 전문 웹 사이트입니다! "라는 회사 페이지에 표시되기 시작합니다.

가장 쉬운 방법에 따라이 문제를 해결하는 세 가지 방법이 있습니다. 그것들은 위에서 아래로 어려움 / 용감의 범위입니다.

Drupal / PHP 방법

주제에 관한 긴 Drupal 버그가 있습니다 : Issue # 1796596 그리고 comment # 124 에서 문제를 해결하는 좋은 패치가 있습니다.

이 수정 프로그램이 곧 Redirect 모듈에 다운로드되어 다운로드되기를 바랍니다. 그러나 1 년이 지났지 만 지금은 아무런 진전이 보이지 않습니다.

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 경로 설정"아래에 표시됩니다 (예 : "Alias ​​: company")는 페이지의 URL이 "company"임을 의미합니다. 'URL 경로 설정'을 클릭하여 해당 섹션을 방문하고 확실하지 않은 경우 URL 별칭을 확인할 수 있습니다.
  4. 이제 "URL 리디렉션"을 클릭하십시오. 현재 페이지로 리디렉션이 표시됩니다. 3 단계에서 적어 둔 URL 별칭과 동일한 리디렉션이 하나 이상 있어야합니다.이 목록에서 둘 이상의 리디렉션이 URL 별칭과 일치 할 수 있습니다.
  5. URL 별명과 동일한 모든 리디렉션을 삭제하십시오. 루프 및 오류 메시지가 표시되는 문제 데이터입니다.
  6. "URL 리디렉션"아래에 URL 경로 설정에서 문제 페이지의 URL 별명과 정확히 일치하는 리디렉션이 더 이상 없으면 오류 메시지가 사라집니다.

잘 작동하는 SQL 방법! thx
레미

리디렉션 할 패치는 거의 릴리스 준비가되었습니다. 내가 언급하겠다고 생각 했어요
Alfred Armstrong

1

노드 별명에 대해 동일한 redirecs가있는 경우이 오류를 해결하는 또 다른 방법은 모든 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
따라서 무한 리디렉션 루프를 수정하는 대신 경고를 생략 했습니까?
George

1
내가 어렸을 때 (코딩 방법을 알기 전에) 이런 종류의 일을 했음에도 불구하고 전문적인 자격 으로이 작업을 수행하지 않는 것이 좋습니다. 문제를 해결할 수 없을뿐만 아니라 문제가 있다는 유일한 표시기를 숨기고 있습니다!
colan

-2

내 영어 실력은 좋지 않지만 문제가없는 것 같습니다. 나는 그 문제를 전에 가지고 있었고 그것을 해결하여 모듈 REDIRECT를 제거했다. KoZnaZna 사이트 팀 감사-Simon


1
기능이 필요한 경우 리디렉션 모듈을 제거해도 도움이되지 않습니다.
colan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.