Bí danh đường dẫn tạo vòng lặp chuyển hướng hoặc chuyển hướng đến trang trước


11

Khi tôi gọi chỗ ngồi của chúng tôi là "www.example.com/contact-us", tôi gặp phải lỗi sau:

Rất tiếc, có vẻ như yêu cầu này đã cố gắng tạo một vòng lặp vô hạn. Chúng tôi không cho phép những thứ như vậy ở đây. Chúng tôi là một trang web chuyên nghiệp!

Nếu tôi gọi trang web bằng "www.example.com/node/5", trang liên hệ sẽ hiển thị tốt.

Khi tôi kiểm tra bí danh đường dẫn trên / admin / config / search / path / edit / 6, đường dẫn hệ thống và bí danh được đặt chính xác.

Một vấn đề khác tồn tại đối với một bí danh khác, khi tôi gọi "www.example.com/staff" Tôi đang được chuyển hướng đến trang đích "www.example.com". Một lần nữa bí danh được đặt chính xác.

Chúng tôi đang sử dụng Drupal 7 và các mô-đun i18n_redirect và redirect.


Tôi đoán tôi đã tìm thấy nó: trong "www.example.com/admin/config/search/redirect" có các mục chuyển hướng các URL đó. Tôi không biết làm thế nào họ đến đó mặc dù ...
Matthias

Câu trả lời:


19

Chỉnh sửa trang của bạn và chuyển đến URL chuyển hướng . Tìm đường dẫn chuyển hướng với số lượng nhiều nhất và xóa nó. Nhấn vào lưu rồi xem trang.

Hãy cho tôi biết nếu điều đó khắc phục vấn đề của bạn


Tôi đang gặp một vấn đề tương tự và trong khi điều này khắc phục mọi thứ cho các nút riêng lẻ, tôi đang cố gắng tìm ra nguyên nhân gây ra sự cố ở nơi đầu tiên để điều này không xảy ra khi bắt đầu.
Vàng

8

Cập nhật: Vấn đề Drupal # 1796596 đã được cam kết kể từ Redirect 1.0-rc2 (tháng 6 năm 2015). Giải pháp chính xác cho vấn đề này bây giờ là nâng cấp lên bản phát hành ổn định mới nhất của mô-đun Redirect, sau đó chạy cập nhật cơ sở dữ liệu. Bất kỳ chuyển hướng tròn nào bạn có sẽ được làm sạch một cách an toàn.

Vấn đề này xảy ra do một lỗi trong mô-đun chuyển hướng. Bạn kích hoạt nó bằng cách thay đổi URL của một trang (hoặc có thể chỉ là tiêu đề của trang đó, nếu bạn đang sử dụng pathauto) và sau đó thay đổi nó trở lại như trước đây.

Ví dụ: giả sử tôi có một trang gọi là "công ty" và tôi đã thay đổi tiêu đề thành "Công ty của chúng tôi" (đã thay đổi bí danh URL thành công ty của chúng tôi). Sau đó, tôi quyết định tôi thực sự thích nó theo cách đầu tiên vì vậy tôi chỉnh sửa lại nút và thay đổi tiêu đề thành "Công ty". Tại thời điểm đó, thông báo lỗi " Rất tiếc, có vẻ như yêu cầu này đã cố gắng tạo một vòng lặp vô hạn. Chúng tôi không cho phép những thứ như vậy ở đây. Chúng tôi là một trang web chuyên nghiệp! " Sẽ bắt đầu hiển thị trên trang Công ty.

Có ba cách để khắc phục điều này, tùy thuộc vào cách dễ nhất cho bạn. Họ có độ khó / bản lĩnh từ trên xuống dưới.

Phương pháp Drupal / PHP

Có một lỗi Drupal dài về chủ đề: Vấn đề # 1796596 và có một bản vá hoạt động tốt giúp khắc phục vấn đề trong nhận xét # 124 .

Hy vọng rằng bản sửa lỗi này sẽ sớm được cam kết vào mô-đun Redirect để tải xuống. Tuy nhiên, đã hơn một năm nay không có dấu hiệu tiến triển nào trên mặt trận đó.

Phương thức SQL

Cách khắc phục nhanh nhất cho sự cố là với truy vấn SQL tới cơ sở dữ liệu, với nội dung như bên dưới. HÃY CẨN THẬN và chỉ thử phương pháp này nếu bạn biết bạn đang làm gì - trước tiên hãy thử nó trên bản sao phát triển của trang web và đảm bảo bạn có bản sao lưu và kiểm tra các thay đổi ngay sau đó trong trường hợp bạn cần quay lại. Cẩn thận hơn và kiểm tra truy vấn đầu tiên cực kỳ tốt nếu bạn đang sử dụng i18n ... Chạy truy vấn đầu tiên để hiển thị những gì sẽ bị xóa và lần thứ hai thực sự xóa.

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

Nếu bạn không biết cách áp dụng các bản vá hoặc chạy các truy vấn SQL, thì bạn cần khắc phục sự cố bằng tay. Đừng lo lắng, điều này thực sự khá dễ thực hiện (nhưng tốn thời gian so với các phương pháp khác):

Phương pháp thủ công:

Đối với mỗi trang hiển thị thông báo cảnh báo:

  1. Chỉnh sửa trang
  2. Cuộn xuống dưới cùng của mẫu chỉnh sửa
  3. Lưu ý URL chính của trang. Nó được hiển thị bên dưới "cài đặt đường dẫn URL", ví dụ: "Bí danh: công ty" có nghĩa là URL của trang là "công ty". Bạn có thể nhấp vào "Cài đặt đường dẫn URL" để truy cập phần của nó và xác nhận bí danh URL nếu bạn không chắc chắn.
  4. Bây giờ bấm vào "chuyển hướng URL". Các chuyển hướng đến trang hiện tại sẽ được hiển thị. Sẽ có ít nhất một chuyển hướng giống với bí danh URL mà bạn đã lưu ý trong bước 3. Có thể nhiều hơn một chuyển hướng trong danh sách này sẽ khớp với bí danh URL.
  5. Xóa tất cả các chuyển hướng giống như bí danh URL. Đây là những dữ liệu vấn đề gây ra vòng lặp và thông báo lỗi được hiển thị.
  6. Khi không còn chuyển hướng trong "Chuyển hướng URL" khớp chính xác với bí danh URL của trang sự cố trong cài đặt đường dẫn URL, thông báo lỗi sẽ biến mất.

phương pháp SQL hoạt động tốt! thx
rémy

Bản vá để chuyển hướng gần như đã sẵn sàng để phát hành. Chỉ cần nghĩ rằng tôi sẽ đề cập đến nó.
Alfred Armstrong

1

Nếu chúng ta có cùng các chuyển hướng đến bí danh của nút, một cách khác để khắc phục lỗi này là chạy một tập lệnh thông qua tất cả các nid (trong trường hợp các nút) và xem liệu bí danh của mỗi nút có chuyển hướng có cùng tên không, nếu có bị loại bỏ.

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

Bạn có thể chạy mã này trong tùy chọn "Thực thi mã PHP" từ menu phát triển.

Biểu mẫu này tương tự như "Phương thức SQL" chỉ tôi thực hiện điều này từ Drupal chứ không phải trên cơ sở dữ liệu.


Điều này làm việc hoàn hảo!
albertski


0

Tạo tập lệnh 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");
}

Lưu nó vào một tệp và chạy nó từ trong cơ sở mã của trang web của bạn bằng cách sử dụng drush php-script [PATH_TO_SCRIPT]và nó sẽ xóa mọi chuyển hướng xung đột với các bí danh URL.


0

Làm cách nào tôi có thể ngăn hiển thị thông báo lỗi "vòng lặp chuyển hướng" trong máy chủ sản xuất trong tương lai? Tôi đã đặt báo cáo lỗi "không" trong trang này - admin / config / Development / log


-2

Cách duy nhất sau khi thử nhiều bản vá là mở tệp redirect.module và bỏ qua dòng # 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
Vì vậy, thay vì sửa chữa vòng lặp chuyển hướng vô hạn, bạn chỉ bỏ qua cảnh báo?
George

1
Mặc dù tôi đã làm điều này khi tôi còn là một đứa trẻ (trước khi tôi biết cách viết mã), tôi không khuyên bạn nên làm điều này trong bất kỳ khả năng chuyên môn nào. Không chỉ bạn không giải quyết vấn đề, bạn đang ẩn chỉ báo rằng có gì đó không ổn!
colan

-2

Tiếng Anh của tôi không tốt lắm, nhưng tôi nghĩ bạn không gặp vấn đề gì khi đọc tôi. Tôi có trước vấn đề đó và tôi đã giải quyết nó vì vậy tôi đã gỡ bỏ mô-đun GIẢM. Trân trọng trang web KoZnaZna Nhóm - Simon


1
Xóa mô-đun Redirect sẽ không giúp bạn nếu bạn yêu cầu các tính năng của nó.
colan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.