วิธีการสร้างการเปลี่ยนเส้นทางโดยทางโปรแกรม? [ปิด]


14

ฉันพยายามสร้าง 301 redirection ด้วยโมดูลredirect ตัวอย่างเช่นฉันต้องการเปลี่ยนเส้นทางแหล่ง URL ไปยัง URL ภายในผ่านโมดูลที่กำหนดเองของฉัน

ฉันต้องการสร้างการเปลี่ยนเส้นทางเมื่อฉันสร้างโหนด นำเข้าเนื้อหาเก่าสร้างโหนดใหม่และเก็บเส้นทางเก่าไว้

ใครมีความคิด?


1
คุณควรเพิ่มข้อมูลลงในคำถามของคุณอย่างแน่นอน คุณลองทำอะไรไปแล้ว? ปัญหาที่แน่นอนของคุณคืออะไร? ทำไมคุณไม่พูดถึงการโยกย้ายที่คุณพูดถึงในความคิดเห็นหนึ่งในคำตอบ?
leymannx

คุณสามารถใช้ตัวอย่างข้อมูลด้านล่างเพื่อสร้างการเปลี่ยนเส้นทาง URL โดยทางโปรแกรม // สร้างวัตถุที่มีพารามิเตอร์การเปลี่ยนเส้นทาง $ redirect = new stdClass (); redirect_object_prepare ($ เปลี่ยนเส้นทาง); $ redirect-> source = 'old-url'; $ redirect-> source_options = array (); $ redirect-> redirect = 'node / 5'; // เส้นทางของระบบใหม่ $ redirect-> redirect_options = array (); $ redirect-> type = 'redirect'; $ redirect-> language = LANGUAGE_NONE; redirect_save ($ เปลี่ยนเส้นทาง);
Aryashree Pritikrishna

คำตอบ:


24

หากคุณต้องการเปลี่ยนเส้นทางการจัดเก็บในฐานข้อมูลใช้โมดูลการเปลี่ยนเส้นทาง โมดูลนี้มีส่วนต่อประสานกับผู้ใช้เพื่อเพิ่มการเปลี่ยนเส้นทาง การเปลี่ยนเส้นทางถูกเก็บไว้ในเอนทิตีเนื้อหาซึ่งคุณสามารถสร้างโดยทางโปรแกรม:

use Drupal\redirect\Entity\Redirect;

  Redirect::create([
    'redirect_source' => 'redirects/redirect1',
    'redirect_redirect' => 'internal:/node/1',
    'language' => 'und',
    'status_code' => '301',
  ])->save();

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


6

คุณสามารถใช้RedirectResponseเพื่อให้บรรลุสิ่งนี้

อ้างอิงลิงค์ต่อไปนี้

/drupal//a/138852


ขอบคุณสำหรับคำตอบ. แต่ฉันต้องการสร้างการเปลี่ยนเส้นทางเมื่อฉันสร้างโหนด ฉันนำเข้าเนื้อหาเก่าในการสร้างโหนดใหม่และฉันเก็บเส้นทางเก่า
Romest

4

คุณสามารถเปลี่ยน. htaccess ได้โดยเพิ่มรหัสนี้:

#custom redirects
RewriteRule ^old/URL/path$ http://example.com/new/path [R=301,L]
#end custom redirects

หรือถ้าคุณต้องการทำสิ่งนี้ใน Drupal:

return new RedirectResponse(Drupal\Core\Url::fromUri('route_name')); 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.