Score:0

วิธีหลีกเลี่ยง nginx เพื่อเปลี่ยนเส้นทาง POST ไปที่ GET

ธง mu

ฉันเห็นสิ่งนี้ในบันทึกของฉัน

"POST /openDoor HTTP/1.1" 301 169 "-" "บุรุษไปรษณีย์รันไทม์/7.29.0"

"GET /openDoor/ HTTP/1.1" 200 113 "https:///openDoor" "PostmanRuntime/7.29.0"

ฉันกำลังโพสต์ไปที่ /openDoor และฉันได้รับ 301 ทำไม

ไฟล์ conf nginx ของฉันคือสิ่งนี้

เซิร์ฟเวอร์ {

    client_body_buffer_size 30M;
    client_max_body_size 30M;


    ตำแหน่ง ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass ยูนิกซ์:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        รวม fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;

        proxy_buffer_size 1024k;
        proxy_buffers 32 2048k;
        proxy_busy_buffers_size 2048k;
    }


    ที่ตั้ง / {
        ดัชนี index.php;
        try_files $uri $uri/ /index.php?q=$uri&$args =404;
    }


    error_log /var/log/nginx/error.log เตือน;
    access_log /var/log/nginx/access.log รวมกัน;

    server_name <แก้ไข>;

    รูท /var/www/project;


    ฟัง 443 ssl; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/<redacted>/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/<redacted>/privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

}

จะหลีกเลี่ยงการเปลี่ยนเส้นทางแปลก ๆ นี้ได้อย่างไร?

ฉันลองสิ่งนี้โดยไม่มีผลลัพธ์ใด ๆ

สถานที่ / openDoor {
  add_header Cache-Control ไม่มีแคช;
  หมดอายุ -1;
  add_header Cache-Control ไม่มีที่เก็บ;
  try_files /openDoor/index.php =404;
}


ตำแหน่ง /openDoor/ {
  add_header Cache-Control ไม่มีแคช;
  หมดอายุ -1;
  add_header Cache-Control ไม่มีที่เก็บ;
  try_files /openDoor/index.php =404;
}
Ivan Shatsky avatar
gr flag
แทนที่ `try_files $uri $uri/ /index.php?q=$uri&$args =404;` ด้วย `try_files $uri $uri/ /index.php?q=$uri&$args;`
realtebo avatar
mu flag
ไม่มีอะไรเปลี่ยนแปลง
Ivan Shatsky avatar
gr flag
คำนำหน้า `/ openDoor ' คืออะไร เป็นเส้นทางที่ควรประมวลผลโดยตัวควบคุมกลาง `root /var/www/project/index.php` หรือเป็นไดเร็กทอรีที่มี webapp เพิ่มเติมอยู่หรือไม่
realtebo avatar
mu flag
/openDoor เป็นฟิสิคัลไดเร็กทอรี
Score:0
ธง gr

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

สถานที่ = / openDoor {
    ส่งคืน 308 $request_uri;
}

แม้ว่าจะไม่เกี่ยวข้องโดยตรงกับคำถามของคุณ แต่คุณควรแทนที่

try_files $uri $uri/ /index.php?q=$uri&$args =404;

แนวเดียวกับ

try_files $uri $uri/ /index.php?q=$uri&$args;

เหตุผลก็คือว่า try_files directive ประมวลผลไฟล์ด้วย ที่ตั้ง บล็อกบริบท และเนื่องจากคุณไม่มีตัวจัดการ FastCGI ในตำแหน่งนั้น index.php ไฟล์จะแสดงเป็นข้อความธรรมดา ในทางกลับกันสุดท้าย try_files พารามิเตอร์จะถือว่าเป็น URI ใหม่และถูกต้อง ตำแหน่ง ~ \.php$ { ... } จะถูกเลือกให้ทำหน้าที่นั้น

realtebo avatar
mu flag
ฉันไม่สามารถใช้การเปลี่ยนเส้นทางได้เพราะฉันเรียกมันว่าใช้ POST (ลูกค้า ไม่ใช่ความผิดของฉัน .. เรื่องเศร้าที่ยาวเหมือนเคย) และด้วยวิธีนี้ ฉันได้รับ POST ที่เปลี่ยนเส้นทางเป็น GET
Ivan Shatsky avatar
gr flag
คุณหมายความว่าคุณได้เปลี่ยนเมธอด "POST" เป็น "GET" แม้จะใช้การเปลี่ยนเส้นทาง "HTTP 308" ใช่ไหม
realtebo avatar
mu flag
ใช่อีวานอย่างแน่นอน

โพสต์คำตอบ

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