นามแฝงเส้นทางสร้างวนรอบการเปลี่ยนเส้นทางหรือเปลี่ยนเส้นทางไปยังหน้าแรก


11

เมื่อฉันโทร "www.example.com/contact-us" ของเราฉันได้รับข้อผิดพลาดต่อไปนี้:

อ๊ะดูเหมือนคำขอนี้พยายามสร้างการวนซ้ำไม่สิ้นสุด เราไม่อนุญาตสิ่งต่าง ๆ ที่นี่ เราเป็นเว็บไซต์มืออาชีพ!

ถ้าฉันโทรไปที่ไซต์ด้วย "www.example.com/node/5" หน้าการติดต่อจะแสดงผลได้ดี

เมื่อฉันตรวจสอบนามแฝงเส้นทางบน / admin / config / search / path / edit / 6, เส้นทางของระบบและชื่อแทนถูกตั้งค่าอย่างถูกต้อง

มีปัญหาอื่นเกิดขึ้นสำหรับชื่อแทนอื่นเมื่อฉันเรียกว่า "www.example.com/staff" ฉันจะถูกเปลี่ยนเส้นทางไปยังหน้า Landing Page "www.example.com" ตั้งชื่อแทนอีกครั้งอย่างถูกต้อง

เรากำลังใช้ Drupal 7 และโมดูล i18n_redirect และ redirect


ฉันเดาว่าฉันเจอ: ใน "www.example.com/admin/config/search/redirect" มีรายการที่เปลี่ยนเส้นทาง URL เหล่านั้น ฉันไม่รู้ว่าพวกเขาไปถึงที่นั่นได้อย่างไร ...
แมทเทียส

คำตอบ:


19

แก้ไขหน้าเว็บของคุณและไปที่การเปลี่ยนเส้นทาง URL ค้นหาเส้นทางเปลี่ยนเส้นทางที่มีจำนวนครั้งมากที่สุดแล้วลบออก คลิกบันทึกจากนั้นดูหน้า

แจ้งให้เราทราบหากแก้ไขปัญหาของคุณได้


ฉันมีปัญหาที่คล้ายกันและในขณะนี้แก้ไขสิ่งต่าง ๆ สำหรับแต่ละโหนฉันพยายามค้นหาสาเหตุที่เกิดขึ้นในสถานที่แรกจึงไม่เกิดขึ้นเริ่มต้นด้วย
ทองคำ

8

อัปเดต: ปัญหา Drupal # 1796596 มุ่งมั่นตั้งแต่ Redirect 1.0-rc2 (มิถุนายน 2015) วิธีแก้ไขปัญหาที่ถูกต้องสำหรับปัญหานี้ในขณะนี้คือการปรับรุ่นเป็นโมดูล Redirect รุ่นเสถียรล่าสุดแล้วเรียกใช้การปรับปรุงฐานข้อมูล การเปลี่ยนเส้นทางแบบวงกลมใด ๆ ที่คุณมีจะได้รับการทำความสะอาดอย่างปลอดภัย

ปัญหานี้เกิดขึ้นเนื่องจากข้อบกพร่องในโมดูลการเปลี่ยนเส้นทาง คุณเรียกใช้งานโดยเปลี่ยน URL ของหน้า (หรืออาจเป็นเพียงชื่อเรื่องหากคุณกำลังใช้พา ธ โตโต้) จากนั้นเปลี่ยนกลับเป็นสิ่งที่เคยเป็น

ตัวอย่างเช่นสมมติว่าฉันมีหน้าชื่อ "บริษัท " และฉันเปลี่ยนชื่อเป็น "บริษัท ของเรา" (ซึ่งเปลี่ยนชื่อแทน URL เป็น บริษัท ของเรา) จากนั้นฉันก็ตัดสินใจว่าฉันชอบมันเป็นวิธีแรกดังนั้นฉันจึงแก้ไขโหนดอีกครั้งและเปลี่ยนชื่อกลับเป็น "บริษัท " ณ จุดนั้นข้อความแสดงข้อผิดพลาด " อุ๊ปดูเหมือนว่าคำขอนี้พยายามที่จะสร้างวงวนไม่สิ้นสุดเราไม่อนุญาตสิ่งต่าง ๆ ที่นี่เราเป็นเว็บไซต์มืออาชีพ! " จะเริ่มปรากฏบนหน้า บริษัท

มีสามวิธีในการแก้ไขปัญหานี้ขึ้นอยู่กับสิ่งที่ง่ายที่สุดสำหรับคุณ พวกเขามีช่วงความยากลำบาก / ความกล้าหาญจากบนลงล่าง

วิธี Drupal / PHP

มีข้อผิดพลาด Drupal ยาวในเรื่องที่เป็น: Issue # 1796596และมีดีแพทช์การทำงานที่การแก้ไขปัญหาในความคิดเห็น# 124

หวังว่าการแก้ไขนี้จะได้รับความมุ่งมั่นในโมดูล Redirect เพื่อดาวน์โหลด อย่างไรก็ตามเป็นเวลากว่าหนึ่งปีแล้วที่ไม่มีสัญญาณของความคืบหน้าใด ๆ

วิธีการ 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" การเปลี่ยนเส้นทางไปยังหน้าปัจจุบันจะปรากฏขึ้น จะมีการเปลี่ยนเส้นทางอย่างน้อยหนึ่งครั้งที่เหมือนกับชื่อแทน URL ที่คุณระบุไว้ในขั้นตอนที่ 3 เป็นไปได้ที่จะมีการเปลี่ยนเส้นทางมากกว่าหนึ่งรายการในรายการนี้จะตรงกับชื่อแทน URL
  5. ลบการเปลี่ยนเส้นทางทั้งหมดที่เหมือนกับ URL แทน นี่เป็นข้อมูลปัญหาที่ทำให้ลูปและข้อความแสดงข้อผิดพลาดปรากฏขึ้น
  6. เมื่อไม่มีการเปลี่ยนเส้นทางภายใต้ "การเปลี่ยนเส้นทาง URL" ที่ตรงกับชื่อแทน URL ของหน้าปัญหาภายใต้การตั้งค่าเส้นทาง URL ข้อความผิดพลาดจะหายไป

วิธีการทำงานของ SQL ที่ดี! ขอบคุณ
rémy

โปรแกรมปะแก้เปลี่ยนเส้นทางเกือบพร้อมแล้วสำหรับการเปิดตัว แค่คิดว่าฉันจะพูดถึงมัน
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);
  }
}

คุณสามารถเรียกใช้รหัสนี้ในตัวเลือก "Execute PHP Code" จากเมนูการพัฒนา

แบบฟอร์มนี้คล้ายกับ "วิธีการ 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");
}

บันทึกลงในไฟล์และเรียกใช้จากภายใน codebase ของเว็บไซต์ของคุณโดยใช้drush php-script [PATH_TO_SCRIPT]และจะลบการเปลี่ยนเส้นทางใด ๆ ที่ขัดแย้งกับชื่อแทน URL


0

ฉันจะป้องกันไม่ให้แสดงข้อความแสดงข้อผิดพลาด "การเปลี่ยนเส้นทางวน" ในเซิร์ฟเวอร์การผลิตในอนาคตได้อย่างไร ฉันได้ตั้งค่าการรายงานข้อผิดพลาด "none" ในหน้านี้แล้ว - 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
แม้ว่าฉันจะทำสิ่งนี้เมื่อฉันยังเป็นเด็ก (ก่อนที่ฉันจะรู้วิธีการใช้รหัส) ฉันไม่แนะนำให้ทำสิ่งนี้ในความสามารถระดับมืออาชีพ คุณไม่เพียง แต่ไม่ได้แก้ปัญหาเท่านั้นคุณยังซ่อนตัวบ่งชี้เพียงอย่างเดียวว่ามีบางอย่างผิดปกติ!
colan

-2

ภาษาอังกฤษของฉันไม่ค่อยดีนัก แต่ฉันคิดว่าคุณไม่มีปัญหาในการอ่านฉัน ฉันมีปัญหาก่อนหน้านั้นและฉันแก้ไขได้ดังนั้นฉันจึงลบโมดูล REDIRECT ออก ขอแสดงความนับถือไซต์ไซต์ KoZnaZna - Simon


1
การลบโมดูลการเปลี่ยนเส้นทางจะไม่ช่วยคุณหากคุณต้องการคุณสมบัติของโมดูล
colan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.