เปลี่ยนเส้นทางไปยังโดเมนอื่น ยกเว้นว่า URL มีตัวระบุ

ขออภัยหากหัวข้อคำถามดูไม่ชัดเจน ไม่รู้จะอธิบายอะไรไปมากกว่านี้แล้ว

ฉันมี 2 โดเมน: aaa.com และ bbb.com

ฉันต้องการให้โดเมนที่สองของฉัน bbb.com เปลี่ยนเส้นทางไปที่ aaa.com เสมอ ยกเว้นหากมีเส้นทางที่แน่นอน: bbb.com/ct/:id

ตอนนี้ทั้งสองโดเมนเข้าสู่แอป Heroku เดียวกัน

ดังนั้นใน Application Controller ของฉัน ฉันเดาว่าหรือ Routes I จะต้องสแกน URL คำขอ และหากมี /ct/:id ปล่อยให้มันดำเนินการต่อไปที่การทำงานของคอนโทรลเลอร์ หากไม่เปลี่ยนเส้นทางไปที่ aaa.com

หรือฉันสามารถตั้งค่า DNS ให้เปลี่ยนเส้นทางเฉพาะในกรณีที่ ct/:id ไม่ได้อยู่ใน url ได้หรือไม่

โดยพื้นฐานแล้ว ฉันต้องการบรรลุว่าผู้ใช้ไม่สามารถนำทางแอปจาก bbb.com ยกเว้นว่ามี URL เฉพาะ bbb.com/ct/:id อยู่

ฉันใช้ GoDaddy เป็น Registar และตั้งค่า Cname 2 รายการให้กับแอป Heroku ของฉัน

ฉันจะบรรลุพฤติกรรมนี้ได้อย่างไร


person Mini John    schedule 24.12.2015    source แหล่งที่มา


คำตอบ (2)


ฉันชอบที่จะทำการเปลี่ยนเส้นทางของคุณในคอนโทรลเลอร์จริง ไม่ใช่ในไฟล์เส้นทาง เพื่อให้คุณสามารถเขียนข้อมูลจำเพาะของคอนโทรลเลอร์ได้

# app/controllers/application_controller.rb

before_action :redirect_bbb_to_aaa

def redirect_bbb_to_aaa
  if request.host == "http://bbb.com"
    redirect_to some_aaa_path unless request.url == "http://bbb.com/ct/:id"
  end
end
person MilesStanfield    schedule 25.12.2015

คุณสามารถสร้างมิดเดิลแวร์แบบแร็คเพื่อทำการเปลี่ยนเส้นทางได้ ตัวอย่างหนึ่งอยู่ที่นี่ https://github.com/gbuesing/rack-host-redirect/blob/master/lib/rack/host_redirect.rb

OR

ใช้ข้อจำกัดใน Routes.rb หมายเหตุ: ฉันยังไม่ได้ทดสอบ

get "*path" => redirect("http://aaa.com"), constraint: lambda { |request| !request.url.match(/ct\/\d/) }
person archana    schedule 24.12.2015
comment
คำอธิบายบางอย่างจะเป็นประโยชน์มาก ฉันไม่เคยเจาะลึกเรื่องมิดเดิลแวร์เลย - person Mini John; 25.12.2015
comment
ดูโค้ดในอัญมณี (ลิงก์ที่ให้ไว้ด้านบน) github.com/gbuesing/rack-host- เปลี่ยนเส้นทาง/blob/master/lib/rack/ - person archana; 25.12.2015
comment
อันนั้นลิงค์เดียวกันครับ อย่างที่ผมบอกไปผมยังไม่ถึงจุดที่จะเข้าใจ :( - person Mini John; 25.12.2015