Score:1

NGINX รับแอปพลิเคชันในโฟลเดอร์ย่อยเพื่อทำงานกับการเปลี่ยนเส้นทาง

ธง cn

ฉันติดตั้งแล้ว เมาติค ในโฟลเดอร์ย่อยเช่น: ตัวอย่าง.com/m
Mautic ส่วนใหญ่ทำงานได้ดีกับการกำหนดค่าของฉัน (แผงการดูแลระบบ ใช้ Mautic เป็นต้น) แต่สำหรับการเปลี่ยนเส้นทางในโฟลเดอร์ย่อยของฉัน ฉันได้รับ 404:

ตัวอย่าง.com/m 200
example.com/m/form/9 200
example.com/m/form/generate.js?id=9 404

(/ ไม่มีแบบฟอร์ม - ควรเปลี่ยนเส้นทาง / สร้างโดย Mautic แบบไดนามิก)

ไฟล์ทั้งหมดในระบบไฟล์เป็นของ www-data

nginx conf ของฉันสำหรับโฮสต์:

เซิร์ฟเวอร์ {
    server_name www.example.com;
    rewrite_log บน;

    รูท /var/www/example.com/www.example.com;
    ดัชนี index.php index.html index.htm;

    access_log /var/log/nginx/example.com_access.log;
    error_log /var/log/nginx/example.com_error.log ประกาศ;

    #######################################
    ## เริ่มการกำหนดค่าเฉพาะของ Mautic #####
    #######################################

    ที่ตั้ง /m {
        # ทำงานแม้จะมีรูปแบบ:
        try_files $uri $uri/ /m/?q=$uri&$args;
    }

    #######################################
    ## สิ้นสุดการกำหนดค่าเฉพาะของ Mautic #####
    #######################################

    ที่ตั้ง / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    ตำแหน่ง ~ \.php$ {
        รวมตัวอย่าง/fastcgi-php.conf;
        fastcgi_pass ยูนิกซ์:/var/run/php/php7.3-fpm.sock;
    }

    # อายุการใช้งานแคชของเบราว์เซอร์ที่ยาวนานสามารถเพิ่มความเร็วในการเยี่ยมชมเพจของคุณซ้ำได้
    ตำแหน่ง ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log off;
       ปิด log_not_found;
       หมดอายุ 360d;
    }

    # ปิดการเข้าถึงไฟล์ที่ซ่อนอยู่
    ตำแหน่ง ~ /\.ht {
      access_log off;
      ปิด log_not_found;
      ปฏิเสธทั้งหมด
    }

    ฟัง [::]:443 ssl; # จัดการโดย Certbot
    ฟัง 443 ssl; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/stats.example.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/stats.example.com/privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    server_name example.com;
    ฟัง [::]:443 ssl; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/stats.example.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/stats.example.com/privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
    ส่งคืน 301 https://www.example.com$request_uri;

}

เซิร์ฟเวอร์ {
    ถ้า ($host = example.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot


    ถ้า ($host = www.example.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot


    server_name example.com www.example.com;
    ฟัง 80;
    ฟัง [::]:80;
    ส่งคืน 301 https://$host$request_uri;
    #กลับ 404; # จัดการโดย Certbot

}

ผมทำอะไรผิดหรือเปล่า?

Richard Smith avatar
jp flag
`location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$` บล็อกกำลังจัดการ URI ที่ลงท้ายด้วย `.js` คุณสามารถลองย้ายบล็อกนั้นไปไว้ในบล็อก `location /`
cn flag
ถูกต้องแน่นอน มันใช้งานได้แล้ว หากคุณเพิ่มเป็นคำตอบฉันจะยอมรับ :)
Score:1
ธง jp

คุณต้องการ URI ที่ขึ้นต้นด้วย /ม ที่จะจัดการโดย ที่ตั้ง /ม บล็อก.

อย่างไรก็ตาม ตำแหน่งนิพจน์ทั่วไปจะมีความสำคัญกว่า ดังนั้น URI /m/form/generate.js กำลังถูกจัดการโดยตำแหน่งอื่นที่ตรงกับ URI ทั้งหมดที่ลงท้ายด้วย .js. ดู เอกสารนี้.

นั่นคือ ^~ ตัวดำเนินการซึ่งบังคับให้ตำแหน่งคำนำหน้ามีความสำคัญกว่า แต่นั่นจะไม่ทำงานในกรณีของคุณ เนื่องจากแอปพลิเคชันเป็น PHP และคุณต้องการ URI ที่ลงท้ายด้วย .php ที่จะจัดการโดย ตำแหน่ง ~ \.php$ บล็อก.

ดังนั้นฉันขอแนะนำให้คุณทำรัง ที่ตั้ง ทำให้เกิดปัญหาภายใน ที่ตั้ง / บล็อก.

ตัวอย่างเช่น:

ที่ตั้ง /m {
    try_files $uri $uri/ /m/?q=$uri&$args;
}

ที่ตั้ง / {
    try_files $uri $uri/ /index.php$is_args$args;

    ตำแหน่ง ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
        access_log off;
        ปิด log_not_found;
        หมดอายุ 360d;
    }
}

ตำแหน่ง ~ \.php$ {
    ...
}

ตำแหน่ง ~ /\.ht {
    ...
}
cn flag
ขอบคุณ เข้าใจได้มาก!

โพสต์คำตอบ

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