Score:0

เหตุใด nginx จึง "ส่งคืน 301" และ âtry_filesâ ตกอยู่ในลูปไม่สิ้นสุด

ธง dk

รหัสยืนยันของฉัน:

ดัชนี index.html index.php;
ที่ตั้ง / {
    ถ้า ($uri = '/a/') {
        ส่งคืน 301 https://example.com/a;
    }
    try_files $uri $uri/ =404; 
}

หากเป็น url /a/, 301 ถึง /ก, แล้ว try_files ส่วน, เพิ่ม / ถึง /ก จบ กลายเป็น /a/.

ขั้นตอนต่อไปฉันคิดว่ามันจะลอง ดัชนี คำนิยาม กลายเป็น /a/index.htmlและเข้าถึงไฟล์

แต่จริงๆแล้วมันพยายาม /a/, และกระโดดออกจาก ที่ตั้งแล้วเข้าไป ที่ตั้ง อีกครั้งเพื่อ ถ้า ($uri = '/a/') { ... }.

จากนั้นวนซ้ำไม่สิ้นสุด

ทำไมฉันเพิ่งสับสน


สิ่งที่อยากทำคือ

  1. หากมีการร้องขอ ตัวอย่าง.com/a/, ข้ามไปที่ example.com/aจากนั้นถึง 2
  2. หากมีการร้องขอ example.com/a, แสดง example.com/a/index.html (แต่ url เป็น example.com/a).

ใครสามารถช่วยฉันไปถึงนี้?

Score:2
ธง cz

มันทำในสิ่งที่มันควรจะทำ

คุณไม่สามารถเข้าถึงได้ /a/index.html เพราะคุณเปลี่ยนเส้นทางกลับไปที่ /ก ก่อนที่สิ่งนี้จะเกิดขึ้นได้ เมื่อ nginx ประมวลผลสิ่งนี้ จะเห็นไดเร็กทอรีในระบบไฟล์และเปลี่ยนเส้นทางโดยอัตโนมัติ (ถูกต้อง) ไปยัง /a/.

คุณควรลบการเปลี่ยนเส้นทางที่ไม่เหมาะสมนี้

dk flag
คุณหมายถึงเมื่อ try`$uri/` อันดับแรก `/a/` จากนั้น `/a/indx.html` ใช่หรือไม่ (และ `/a/` ยิงกลับเข้าสู่ `ตำแหน่ง` กลับไปที่ `/a`)
digijay avatar
mx flag
ใช่ นั่นคือสิ่งที่การเปลี่ยนเส้นทาง 301 บอกให้ nginx ของคุณทำ
Michael Hampton avatar
cz flag
@nanxiaobei คุณไม่ต้อง try_files เพราะ if ได้รับการประมวลผลก่อน และ **คุณไม่สามารถตัดเครื่องหมายทับต่อท้ายได้เมื่อแสดงเนื้อหาแบบสแตติก** มันเป็นข้อบังคับ เลิกพยายาม.
dk flag
@MichaelHampton ขอบคุณข้อผิดพลาด nginx ที่แสดงคือ "การวนซ้ำไม่สิ้นสุด" ดังนั้นฉันคิดว่าก่อน `if` จากนั้น `$uri/` แล้วจึงกลับไปที่ `if` - เพื่อให้เป็นลูป เมื่อประมวลผล `if` แล้วเปลี่ยนเป็น `/a` ดังนั้นต้องเป็น `/a/` อีกครั้งจึงจะกลับเป็น `if`
Score:0
ธง sv

ยินดีต้อนรับสู่ ServerFault คุณสามารถทำสิ่งที่ระบุไว้ใน OP ด้วยรหัสต่อไปนี้...

ที่ตั้ง / {
    ถ้า ($uri = '/a/') {
        ส่งคืน 301 https://example.com/a;
    }
    try_files $uri $uri/index.html =404; 
}

โปรดดูคำถามที่เกี่ยวข้องและคำตอบที่ยอมรับได้ที่ การลบเครื่องหมายทับท้ายออกจาก URL ด้วย nginx .

โดยพื้นฐานแล้วเราไม่ต้องพึ่งพา ดัชนี และค่อนข้างให้บริการ index.html โดยตรงเมื่อ example.com/a ได้รับการร้องขอ

โพสต์คำตอบ

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