รับ Nginx เพื่อแสดงดัชนีตลอดเวลา


3

ฉันจะให้ nginx ให้บริการ index.html ได้เสมอไม่ว่า URL จะเป็นอย่างไร

ตัวอย่างเช่นฉันต้องการให้ URL แสดงผลhttps://www.example.me/723738เสมอhttps://www.example.me/index.html

ฉันไม่ต้องการใช้การนำทางซ้ำเนื่องจากผู้ใช้ยังคงต้องมี URL ดั้งเดิมที่พวกเขาพิมพ์ในแถบที่อยู่ของพวกเขา

ฉันเปลี่ยนการตั้งค่า Nginx เป็นการนำ 404 ไปยัง index.html อีกครั้ง แต่ฉันไม่คิดว่าเป็นวิธีที่ยอดเยี่ยมในการทำเช่นนั้นเพราะจะส่งคืนการตอบกลับ 404

ในอนาคตฉันอาจต้องการให้ index.html แสดง URL ดั้งเดิมที่ผู้ใช้เข้าถึงมีวิธีการทำเช่นนี้หรือไม่

ขอบคุณ

คำตอบ:


2

ตอบคำถาม 1:

ฟังก์ชั่นที่คุณต้องการเรียกว่าการเขียน URL ใหม่ สิ่งนี้ช่วยให้คุณสร้างมาสก์ (หรือ URL "ปลอม") ซึ่งแสดงทรัพยากรที่อยู่ใน URL อื่น

ใน Nginx สามารถทำได้โดยrewrite <regexp-pattern> <target-url>คำสั่งในไฟล์กำหนดค่า นี่คือการกำหนดค่า Nginx สำหรับโดเมน www.example.com:

server {
    listen 80;
    server_name www.example.com;

    root /var/www/example.com;
    index index.html;

    rewrite ^.*$ /index.html;
}

ส่วน<regexp-pattern>(การลบตามปกติ) เปรียบเทียบกับ URL ที่คุณพิมพ์ลงในเบราว์เซอร์ - หากการแข่งขันประสบความสำเร็จทรัพยากรที่<target-url>จะปรากฏ

ตอบคำถาม 2:

ไม่สามารถแสดง URL ปัจจุบันด้วยเอกสาร HTML ที่แท้จริงเท่านั้น คุณจะต้องใช้ภาษาสคริปต์ฝั่งเซิร์ฟเวอร์ - ตัวอย่างเช่น PHP สิ่งนี้จะช่วยให้คุณแสดงเนื้อหาแบบไดนามิกให้กับผู้ใช้ มีคู่มือที่ไม่รู้จักเหนื่อยบน PHP ที่มี Nginx ( https://askubuntu.com/a/134676 ) และในหัวข้อวิธีแสดง URL ปัจจุบันจาก PHP ( https://stackoverflow.com/a/6768831 )


7

รูปแบบทั่วไปใช้try_filesกับ URI เริ่มต้น สำหรับตัวอย่างที่เรียบง่าย:

server {
    root /path/to/root;
    location / {
        try_files $uri $uri/ /index.html;
    }
}

ดูเอกสารนี้สำหรับข้อมูลเพิ่มเติม


นี่เป็นวิธีที่ง่ายกว่า (ในทางกลับกันจะไม่ปิดบังไฟล์อื่น ๆ ที่มีอยู่ในไดเรกทอรี)
Marek Rost

2
จริงมาก แต่โดยปกติจะมีไฟล์ทรัพยากรที่ต้องดึงเข้าไปด้วยindex.htmlซึ่งเป็นสาเหตุที่ฉันนำเสนอวิธีแก้ปัญหาทั่วไปก่อน
Richard Smith

จะทำอย่างไรถ้าฉันต้องการให้ไฟล์ที่มีอยู่ถูกเขียนใหม่ / เปลี่ยนเส้นทางไปยัง /index.html ด้วย
Qian Chen

1
@ElgsQianChen ใช้หรือtry_files /index.html =404; rewrite ^ /index.html break;แต่ไม่มีการเปลี่ยนแปลงอื่น ๆ มันจะหยุดการเข้าถึงไฟล์ทรัพยากรของคุณ (JS. CSS, IMG)
Richard Smith

นี่เป็นทางออกที่ดีกว่าสำหรับคำถามของ OP เพียงเพื่อประโยชน์ของสินทรัพย์ที่ถูกโหลดอย่างถูกต้องด้วยประเภท MIME ที่ถูกต้อง
gumol

0

นี่คือรหัสที่คุณกำลังมองหา

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/;
index index.html;

location = /favicon.ico { access_log off; log_not_found off; }

error_page 404 =200 /;
}

ด้วยserver_name _; เขาฟังจาก ip ใด ๆ โดเมน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.