Score:2

เปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์และโดเมนอื่นหากไม่พบไฟล์

ธง sd

ฉันได้ย้ายจาก Apache ไปยัง Nginx ดังนั้นฉันต้องการตั้งกฎทั้งหมดใน Nginx

เป้าหมาย: เปลี่ยนเส้นทาง URL ไปยังโดเมนอื่นที่มีชื่อไฟล์เดียวกัน หากไม่พบไฟล์นั้นบนเซิร์ฟเวอร์ที่ร้องขอ

ตัวอย่าง

หากผู้ใช้เปิด https://www.example.com/data/1.jpg จากนั้นเซิร์ฟเวอร์ของฉันจะพยายามค้นหา "1.jpg" ใน "data" dir หากไม่พบไฟล์นั้น ให้เปลี่ยนเส้นทางผู้ใช้ไปยัง URL เซิร์ฟเวอร์สำรอง เช่น https://www.example2.com/backup/1.jpg

ตัวอย่างใน .htaccess

RewriteCond %{REQUEST_FILENAME} -f [หรือ]
RewriteCond %{REQUEST_FILENAME} -d
กฎการเขียนซ้ำ (.*) - [L]
RewriteRule (.*) https://example2.com/backup/$1 [L]

สิ่งที่ฉันได้ลอง

  1. ค้นหาวิธีแก้ปัญหาที่มีอยู่ แต่ฉันไม่พบวิธีแก้ปัญหาที่ใช้งานได้
  2. ลองแปลง apache config เป็น Nginx config ผ่านตัวแปลง แต่ไม่ทำงาน

บางคนพยายามกำหนดค่า แต่ไม่ทำงาน

    ตำแหน่ง ~ /data/.* {
        ถ้า (-e $request_filename){
            เขียนใหม่ ^ https://www.example2.com/backup/$1 สุดท้าย;
        } 
    }


    ตำแหน่ง ~ /data/.* {
        ถ้า (-e $request_filename){
            เขียนใหม่ ^ https://www.example2.com/backup/$1 ถาวร;
        } 
    }


    ตำแหน่ง ~ /data/.* {
        try_files $uri https://www.example2.com/backup/$uri;
    }
kz flag
ในตัวอย่างของคุณ คุณกำลังเปลี่ยนเส้นทางจาก `example.com/data/1.jpg` ไปที่ `example2.com/backup/1.jpg` นั่นเป็นความตั้งใจหรือไม่ หรือควรเป็น `example2.com/backup/data/1.jpg` (ซึ่งเป็นรหัสและคำตอบปัจจุบันของคุณ)
Shubham Panchal avatar
sd flag
ใช่ example2.com/backup/1.jpg เป็นความตั้งใจ
Score:1
ธง us
Rob

ใน nginx คุณจะใช้ a try_files คำสั่งซึ่งให้บริการเนื้อหาจากไฟล์ในเครื่องหากมีอยู่ในไดเร็กทอรีในเครื่องหนึ่ง (หรือมากกว่า) เมื่อไม่พบไฟล์ จะมีการเปลี่ยนเส้นทางภายในไปยัง uri ที่ระบุในพารามิเตอร์สุดท้าย

เนื่องจากไม่สามารถเปลี่ยนเส้นทางภายนอกได้ คุณจึงต้องมีเล่ห์เหลี่ยมเล็กน้อยและแนวทางแบบสองระดับ ในตัวเลือก try_files คุณใช้ตำแหน่งที่มีชื่อสำหรับการเปลี่ยนเส้นทางภายในนั้น และจากตำแหน่งที่มีชื่อนั้น คุณสร้างการเปลี่ยนเส้นทางภายนอก

ที่ตั้ง / {
    try_files $uri @externalbackup;
}

ตำแหน่ง @externalbackup {
     ส่งคืน 301 https://www.example2.com/backup$request_uri ;
}

รหัสข้างต้นยังไม่ได้ทดสอบ

kz flag
ฉันคิดว่าการเปลี่ยนเส้นทางประเภทนี้ควรเป็น 302 (ชั่วคราว) หากมีความตั้งใจว่าไฟล์ที่ขอในตอนแรกอาจมีอยู่ในอนาคต
Shubham Panchal avatar
sd flag
ขอบคุณ @Rob สำหรับคำตอบของคุณ ฉันลองแล้วและการเปลี่ยนเส้นทางใช้งานได้ แต่ชื่อไฟล์ไม่ทำงานใน URL ที่เปลี่ยนเส้นทาง คล้ายกับ: https://www.example2.com/backup แต่ควร: https://www.example2.com/backup/file_name_here
Score:1
ธง sd

ฉันได้รับวิธีแก้ปัญหาหลังจากแก้ไขคำตอบ @Rob

ตั้ง $v_filename nf;

ตำแหน่ง ~ ^/data/(.*)$ {
    try_files $uri @externalbackup;
    ตั้ง $v_filename $1;
}

ตำแหน่ง @externalbackup {
     ส่งคืน 301 https://www.example2.com/backup/$v_filename ;
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา