Nginx หลายราก


13

ฉันต้องการเบี่ยงเบนความสนใจไปยังไดเรกทอรีย่อยหนึ่ง ๆ ไปยังตำแหน่งรากอื่น อย่างไร? บล็อกที่มีอยู่ของฉันคือ:

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

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

นั่นคือhttp://www.domain.comควรให้บริการ /home/me/Documents/site1/index.html ในขณะที่http://www.domain.com/petprojectควรให้บริการ / home / me / pet-Project / เว็บไซต์ /index.html - ดูเหมือนว่า nginx จะเรียกใช้กฎทั้งหมดใหม่หลังจากการแทนที่และhttp://www.domain.com/petprojectจะให้บริการ /home/me/Documents/site1/index.html

คำตอบ:


28

การกำหนดค่ามีปัญหาปกติที่เกิดขึ้นกับ nginx นั่นคือการใช้rootคำสั่งภายในlocationบล็อก

ลองใช้การกำหนดค่านี้แทนlocationบล็อกปัจจุบันของคุณ:

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

ซึ่งหมายความว่าไดเรกทอรีเริ่มต้นสำหรับเว็บไซต์ของคุณคือ/home/me/Documents/site1และสำหรับ/petprojectURI เนื้อหาจะแสดงจาก/home/me/pet-Project/websiteไดเรกทอรี


4

คุณต้องbreakเพิ่มการตั้งค่าสถานะในกฎการเขียนซ้ำเพื่อให้การประมวลผลหยุดลงและเนื่องจากสิ่งนี้อยู่ภายในการประมวลผลบล็อกตำแหน่งจะดำเนินการต่อภายในบล็อกนั้น:

rewrite ^/petproject/?(.*)$ /$1 break;

หมายเหตุฉันได้เพิ่ม/?ไปยังรูปแบบการจับคู่ด้วยเพื่อที่คุณจะได้ไม่ต้องทับด้วยเครื่องหมายสแลชสองครั้งที่จุดเริ่มต้นของ URL


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