Score:1

NGINX เขียนข้อความค้นหาใหม่เป็นเส้นทางหรือไม่

ธง gb

สิ่งที่ฉันพยายามทำ:

แปลง

/posts/?post={randomnumber-atoF}
หรือ
/posts?post=120430awasdfwasfw

ถึง

/posts/120430awasdfwasfw

บล็อกเซิร์ฟเวอร์ของฉัน (จนถึงปัจจุบัน)

เซิร์ฟเวอร์ {
        ฟัง 80 default_server;
        ฟัง [::]:80 default_server;
        รูท / ฟอรั่ม;
        ดัชนี index.php;
        server_name forum.example.net;
        ที่ตั้ง / {
                try_files $uri $uri/ =404;
        }
        # ส่งสคริปต์ PHP ไปยังเซิร์ฟเวอร์ FastCGI
        #
        ตำแหน่ง ~ \.php$ {
                รวมตัวอย่าง/fastcgi-php.conf;
                fastcgi_pass ยูนิกซ์:/var/run/php/php7.4-fpm.sock;
        }
        ตำแหน่ง ~ /\.ht {
                ปฏิเสธทั้งหมด
        }
}

เซิร์ฟเวอร์กำลังรับ URL ที่ส่งผ่านจากพร็อกซี Nginx อื่น (เซิร์ฟเวอร์ระยะไกลอื่น) (และเซิร์ฟเวอร์นี้มี SSL พอร์ต 443)

รายการที่ฉันได้ลอง:

เขียนใหม่ ^/posts/index.php /posts/$arg_post ถาวร;

แก้ไข:

ขออภัย ฉันไม่ได้บอกว่าข้อความค้นหาส่วนใหญ่จะอยู่ในดัชนี เนื่องจาก ?post เป็นข้อความค้นหา ลงในฐานข้อมูล ฉันต้องการสร้างเพื่อที่คุณจะได้ไม่ต้องค้นหา แต่เพียงไปที่ {post number}

sv flag
ยินดีต้อนรับสู่ ServerFault `if ($arg_post != "") { เขียนใหม่ ^/posts/ /posts/$arg_post? ถาวร; }` มีแนวโน้มที่จะทำงาน
Nolan O avatar
gb flag
ฉันลองใช้รหัสของคุณด้านบนและได้ 404 (หากไม่พบ post={post number} ใน DB จะส่งคืน 404) มีวิธีเขียน URL ใหม่ในขณะที่รักษา /posts/?post=333 (ทำตัวเหมือน? โดยไม่มี ?)
djdomi avatar
za flag
จะแสดงอย่างไร, URL ใดควรเป็นและตอนนี้แสดงอยู่ ความคิดเห็นของคุณไม่ได้ทำให้ชัดเจนเพียงพอ
Nolan O avatar
gb flag
PHP ควรเห็น URL อย่างไร: ``` /posts?post=12345 ``` และผู้ใช้ปลายทางควรเห็น ``` /posts/12345 ```
Score:0
ธง sv

ชื่อของโพสต์อาจเป็น "แปลง / เขียนเส้นทาง URL ใหม่เพื่อสืบค้น" อย่างไรก็ตาม ตามการแก้ไขและความคิดเห็น เขียนใหม่ ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id; อาจทำงานได้ ไม่จำเป็นต้องใช้ ถาวร ธงสำหรับ เขียนใหม่. ถ้าคุณใช้ ถาวรผู้ใช้จะถูกเปลี่ยนเส้นทาง

เซิร์ฟเวอร์ {
        ฟัง 80 default_server;
        ฟัง [::]:80 default_server;
        รูท / ฟอรั่ม;
        ดัชนี index.php;
        server_name forum.example.net;

        เขียนใหม่ ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id;

        ที่ตั้ง / {
                try_files $uri $uri/ =404;
        }
        # ส่งสคริปต์ PHP ไปยังเซิร์ฟเวอร์ FastCGI
        #
        ตำแหน่ง ~ \.php$ {
                รวมตัวอย่าง/fastcgi-php.conf;
                fastcgi_pass ยูนิกซ์:/var/run/php/php7.4-fpm.sock;
        }
        ตำแหน่ง ~ /\.ht {
                ปฏิเสธทั้งหมด
        }
}
Nolan O avatar
gb flag
ฉันได้รับข้อผิดพลาดนี้: ``` 2021/07/07 08:51:19 [ข้อผิดพลาด] 244184#244184: *4 การเขียนใหม่หรือรอบการเปลี่ยนเส้นทางภายในขณะเปลี่ยนเส้นทางภายในไปยัง "/posts/index.php" ลูกค้า: ***.***.** *** เซิร์ฟเวอร์: forum.example.net คำขอ: "GET /posts/?1318131055449140129 HTTP/1.1"> 1.1", โฮสต์: "192.168.0.195" ```
sv flag
ความผิดพลาดของฉัน. อัปเดตคำตอบทันที
Nolan O avatar
gb flag
มีวิธีเขียนซ้ำเฉพาะในกรณีที่ไม่พบไฟล์หรือไม่ เช่นถ้า ``` /posts/file``` ไปที่ไฟล์นั้น แต่ถ้า ```/posts/file {รหัสข้อผิดพลาด 404}``` ให้ลองเขียนใหม่หรือไม่
sv flag
อาจเป็นไปได้ โปรดสร้างคำถามใหม่เพื่อให้ทุกคนสามารถเห็นคำตอบที่เป็นไปได้
Nolan O avatar
gb flag
จริง ๆ แล้ว โพสต์นี้แก้ไขให้ฉัน: (jusr แทนที่ ` location /directory ` ด้วย ` location /posts/ ` โพสต์ลิงก์ [ที่นี่](https://serverfault.com/questions/767440/nginx-rewrite-rule-subfolder-404-error)

โพสต์คำตอบ

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