“ ซ่อน” นามสกุลไฟล์. html โดยใช้การเขียนซ้ำ nginx


16

ฉันให้บริการเว็บไซต์คงที่ผ่าน nginx และเป้าหมายของฉันคือการแทนที่ URL ที่มีลักษณะดังนี้:

http://foo.com/bar.html

กับ

http://foo.com/bar

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

    location / {
        root    /srv/www/foo/public_html;
        index   index.html;
    }

    location /bar1 {
        alias /srv/www/foo/public_html/;
        index bar1.html;
    }

    location /bar2 {
        alias /srv/www/foo/public_html/;
        index bar2.html;
    }

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

คำตอบ:


17

try_files ควรเป็นสิ่งที่คุณต้องการ

บางสิ่งเช่นนี้

try_files $uri.html $uri $uri/ =404;

1
สิ่งนี้ทำงานได้โดยมีข้อยกเว้นเล็กน้อยที่ $ uri.html ก่อให้เกิด 500 ฉันต้องใช้ "$ {uri} .html"
Doug Stephen

4
การเปลี่ยนtry_files $uri.html $uri/ =404;เป็น SEO จะดีกว่าเพราะคุณไม่มีสองfoobar.com/barและfoobar.com/bar.html ที่ชี้ไปยังแหล่งข้อมูลเดียวกัน
Khaja Minhajuddin

5

ตามความคิดเห็นจาก @Khaja คำตอบที่ดีที่สุดคือ:

try_files $uri.html $uri/ =404;

เพื่อที่จะให้บริการสำเนาของทรัพยากรเพียงชุดเดียว (ที่ไม่มีนามสกุล. html) คุณไม่ต้องการแบ่งความแข็งแรงของลิงก์มากกว่า URL หลายรายการที่แสดงเนื้อหาที่ซ้ำกัน ค้นหาเอกสารที่นี่


ฉันลองสิ่งนี้ try_files $ uri.html $ uri / = 404; มันทำให้การโหลดหน้าแรกโดยไม่ระบุชื่อ myurl / index ก็ทำให้การโหลด. css, .js ฯลฯ
aspiringGuru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.