Score:0

NGINX เขียน URL ใหม่บน wordpress แต่ได้ 404

ธง my

ฉันมีเว็บไซต์ WordPress ซึ่งปัจจุบัน URL ของฉันเขียนดังนี้
http://example.com/for-sale/12345-aaa-123-street-bbb-city/

และฉันต้องการยังคงให้บริการ URL เดิม แต่ฉันต้องการให้ URL มีลักษณะดังนี้
http://example.com/city/street/

ฉันได้สร้างกฎการเขียนใหม่ของ เขียนใหม่สำหรับขาย/([0-9]+)-aaa-(.*)-bbb-(.*) /$3/$2/ ถาวร;

สิ่งนี้จะเขียน URL ของฉันใหม่ แต่ส่งคืนข้อผิดพลาด 404 นี่คือสิ่งที่บันทึกการเขียนซ้ำส่งคืน

2021/11/04 04:48:39 [ประกาศ] 23077#23077: *4643 เปลี่ยนเส้นทางใหม่: "/Vernon//539-Apache-County-Road-3144/", ลูกค้า: 108.162.215.21, เซิร์ฟเวอร์: example.com คำขอ: "GET /for-sale/20071-aaa-539-Apache-County-Road-3144-bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com" คอม/เวอร์นอน/"
2021/11/04 04:48:40 [ประกาศ] 23077#23077: *4646 "สำหรับขาย/([0-9]+)-aaa-(.*)-bbb-(.*)" ตรงกับ "/ ขาย/14808-aaa-35640A-Hwy-60-bbb-Vernon/", ลูกค้า: 172.70.98.47, เซิร์ฟเวอร์: example.com, คำขอ: "GET /for-sale/14808-aaa-35640A-Hwy-60 -bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com/vernon/"
2021/11/04 04:48:40 [ประกาศ] 23077#23077: *4646 เปลี่ยนเส้นทางใหม่: "/Vernon//35640A-Hwy-60/", ลูกค้า: 172.70.98.47, เซิร์ฟเวอร์: example.com, คำขอ: " GET /for-sale/14808-aaa-35640A-Hwy-60-bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com/vernon/"
2021/11/04 04:48:41 [ประกาศ] 23077#23077: *4649 "for-sale/([0-9]+)-aaa-(.*)-bbb-(.*)" ไม่ตรงกัน "/for-sale/19617-2926-DEER-HILL-Road-Heber-Arizona-85928/", ลูกค้า: 108.162.245.49, เซิร์ฟเวอร์: example.com, คำขอ: "GET /for-sale/19617-2926-DEER -HILL-Road-Heber-Arizona-85928/ HTTP/1.1", โฮสต์: "example.com"
2021/11/04 04:48:41 [ประกาศ] 23077#23077: *4651 "สำหรับขาย/([0-9]+)-aaa-(.*)-bbb-(.*)" ตรงกับ "/ ขาย/6944-aaa-35640-Hwy-60-bbb-Vernon/", ลูกค้า: 172.69.35.180, เซิร์ฟเวอร์: example.com, คำขอ: "GET /for-sale/6944-aaa-35640-Hwy-60 -bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com/vernon/"
2021/11/04 04:48:41 [ประกาศ] 23077#23077: *4651 เปลี่ยนเส้นทางใหม่: "/Vernon//35640-Hwy-60/", ลูกค้า: 172.69.35.180, เซิร์ฟเวอร์: example.com, คำขอ: " GET /for-sale/6944-aaa-35640-Hwy-60-bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com/vernon/"
2021/11/04 04:48:42 [ประกาศ] 23077#23077: *4654 "for-sale/([0-9]+)-aaa-(.*)-bbb-(.*)" ตรงกัน "/ ขาย/18232-aaa-72-County-Road-8144-bbb-Vernon/", ลูกค้า: 172.172.35.168, เซิร์ฟเวอร์: example.com, คำขอ: "GET /for-sale/18232-aaa-72-County -Road-8144-bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com/vernon/"
2021/11/04 04:48:42 [ประกาศ] 23077#23077: *4654 การเปลี่ยนเส้นทางที่เขียนใหม่: "/Vernon//72-County-Road-8144/", ลูกค้า: 172.172.35.168, เซิร์ฟเวอร์: example.com, คำขอ : "GET /for-sale/18232-aaa-72-County-Road-8144-bbb-Vernon/ HTTP/1.1", โฮสต์: "example.com", ผู้อ้างอิง: "https://example.com/vernon/ "

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

นี่คือการกำหนดค่าทั้งหมดของฉัน ขอบคุณสำหรับความช่วยเหลือใด ๆ

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

  server_name example.com www.example.com;

    access_log /var/www/example.com/logs/access.log;
    error_log /var/www/example.com/logs/error.log;
    rewrite_log บน;
    รูท /var/www/example.com/public;
    ดัชนี index.php;


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


ที่ตั้ง / {

เขียนใหม่สำหรับขาย/([0-9]+)-aaa-(.*)-bbb-(.*) /$3/$2/ ถาวร;
        try_files $uri $uri/ /index.php?$args;

        }


        #ฟาสต์ซีจี
        ตำแหน่ง ~ \.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 เปิด HTTPS;
        fastcgi_param HTTP_SCHEME https;
        fastcgi_read_timeout 150;
        }

        #แคชไฟล์คงที่ให้นานที่สุด
        ตำแหน่ง ~*.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar |bz)$ { หมดอายุ 365d;
        }
        ตำแหน่ง ~ ^/(wp-admin|wp-login|ngx_pagespeed_statistics|ngx_pagespeed_global_statistics|ngx_pagespeed_message)$ { #auth_basic "ส่วนตัว";
        auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
        }

        ตำแหน่ง ~* /wp-includes/.*.php$ {
        ปฏิเสธทั้งหมด
        access_log off;
        ปิด log_not_found;
        }
        ตำแหน่ง ~* /wp-content/.*.php$ {
        ปฏิเสธทั้งหมด
        access_log off;
        ปิด log_not_found;
        }



}

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


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


    server_name example.com www.example.com;


    ฟัง 80;
    กลับ 404; # จัดการโดย Certbot


}
Ivan Shatsky avatar
gr flag
คุณได้รับหน้า 404 แบบกำหนดเองของ WordPress หรือ nginx แบบดิบหรือไม่? ดูเหมือนว่าจะเป็น WP ที่ไม่เข้าใจ URI ที่เขียนใหม่ของคุณ คุณสามารถตรวจสอบด้วยตนเองโดยป้อน `https://example.com/Vernon//72-County-Road-8144/` ที่แถบที่อยู่ของเบราว์เซอร์
David avatar
my flag
ใช่ มันคือ 404 จาก WordPress "ไม่พบหน้านี้". หน้าเดิมที่เป็นปัญหาน่าจะเป็น https://example.com/for-sale/12356-aaa-72-County-Road-8144-bbb-Vernon/ และฉันยังคงพยายามแสดงหน้านั้นแต่ใช้ URL แสดงเป็น https://example.com/vernon/72-County-Road-8144/ และดูเหมือนว่า WordPress ต้องการให้หน้านั้นอยู่ในตำแหน่งหลังหรือไม่ ความคิดใดที่ฉันต้องดู ขอบคุณสำหรับความช่วยเหลือของคุณ.
Ivan Shatsky avatar
gr flag
ใช่ WordPress คาดหวังว่าจะมีหน้านั้นอยู่ในทางทฤษฎี คุณสามารถทำในทางกลับกันได้ โดยเขียน URI `/vernon/72-County-Road-8144 ใหม่เป็นการภายในเป็น `/for-sale/12356-aaa-72-County-Road-8144-bbb- Vernon` (หากคุณมีอัลกอริทึมในการเขียนย้อนกลับ) และขอให้ WP core ให้บริการหน้าที่เขียนใหม่ในขณะที่แถบที่อยู่ของเบราว์เซอร์ของคุณจะแสดง URL ดั้งเดิม สำหรับฉันแล้ว ดูเหมือนว่าไม่ว่าคุณจะพยายามทำอะไร คุณเลือกผิด วิธีการทำ
David avatar
my flag
ใช่ ฉันกลัวว่าฉันอาจจะไปผิดทาง น่าเสียดายที่ปลั๊กอินอสังหาริมทรัพย์กำลังสร้างโครงสร้าง URL ที่ฉันพยายามเปลี่ยน และไม่สามารถเปลี่ยนโครงสร้างลิงก์ถาวรในการตั้งค่าปลั๊กอินเพื่อให้แสดงเมืองก่อน แล้วจึงระบุที่อยู่ เป็นต้น เมื่อฉันติดต่อผู้พัฒนา พวกเขาแนะนำให้ฉันตรวจสอบการเขียน URL ใหม่ทางฝั่งเซิร์ฟเวอร์ แต่ตอนนี้ฉันเห็นว่าด้วย WordPress ฉันไม่สามารถให้ Nginx เขียนใหม่ได้อย่างที่ฉันคิด
djdomi avatar
za flag
https://www.cyberciti.biz/faq/how-to-configure-nginx-for-wordpress-permalinks/ อาจมีโอกาสสำหรับโซลูชัน permalink นี้
Score:0
ธง gr

นี่ไม่ใช่คำตอบ แต่ยาวเกินไปที่จะแสดงความคิดเห็น ดังนั้นฉันจึงเขียนสิ่งนี้เป็นคำตอบ

สิ่งที่คุณพยายามบรรลุนั้นเป็นไปได้ อย่างไรก็ตามหากต้องการใช้งาน คุณต้องมีชุดซอฟต์แวร์ที่ซับซ้อนกว่านี้ คุณต้องมีที่เก็บคีย์-ค่า (เช่น เรดิส) และเว็บเซิร์ฟเวอร์ที่สามารถใช้งานได้ในขณะที่ให้บริการคำขอ (เช่น nginx with lua-nginx-โมดูล และ lua-resty-redis).

นี่คือ (หนึ่งใน) อัลกอริทึมที่เป็นไปได้

  • หลังจากได้รับคำขอ ให้ตรวจสอบว่าพื้นที่จัดเก็บมีค่าบางอย่างโดยใช้ URI คำขอเป็นคีย์หรือไม่
    • ถ้าใช่ ให้รับค่าจากที่เก็บข้อมูลและใช้เป็น URI สำหรับ WordPress
    • หากไม่เป็นเช่นนั้น ให้ตรวจสอบว่า URI ตรงกับรูปแบบ regex ของเราหรือไม่
      • ถ้าใช่ ให้ทำดังนี้
        • สร้าง URI ที่เขียนใหม่
        • เก็บ URI ดั้งเดิมและที่เขียนใหม่เป็นคีย์/ค่าในที่จัดเก็บ
        • ส่งคืนการเปลี่ยนเส้นทางด้วย URI ใหม่
      • หากไม่ใช่ ให้ดำเนินการตาม URI คำขอของเราตามปกติ

สูตรที่สมบูรณ์เกี่ยวกับการใช้สแต็กนี้อยู่นอกขอบเขตสำหรับคำตอบ ServerFault ปกติ แต่คุณสามารถใช้เป็นแนวคิดได้

โพสต์คำตอบ

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