Score:1

การเปลี่ยนเส้นทางภายในของ wordpress โดยใช้ nginx

ธง mx

ฉันมีไซต์ WordPress ที่มีลิงก์ถาวรตั้งค่าเป็นชื่อโพสต์

การใช้ Nginx rewrite ฉันพยายามเปลี่ยนเส้นทางภายใน (โดยไม่มีการเปลี่ยนแปลงใน URL ของเบราว์เซอร์) แต่จนถึงตอนนี้ ฉันยังทำไม่สำเร็จ

ใช้งานได้ แต่ URL เปลี่ยนไป

ตำแหน่ง ~ ^/u/(.*) {
    เขียนใหม่ ^/u/(.*) /p/?username=$1 redirect; 
}

ฉันไม่เข้าใจว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้:

ตำแหน่ง ~ ^/u/(.*) {
    # สิ่งนี้ส่งคืน 404
    เขียนใหม่ ^/u/(.*) /p/?username=$1 สุดท้าย;
}

การกำหนดค่าทั้งหมด

เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง [::]:80;
    server_name example.com;

    รูท /srv/www/html;
    error_log /var/log/nginx/error.log;
    ดัชนี index.php;

    สถานที่ = /favicon.ico {
        ปิด log_not_found;
        access_log off;
    }

    ตำแหน่ง = /robots.txt {
        อนุญาตทั้งหมด
        ปิด log_not_found;
        access_log off;
    }

    ตำแหน่ง ~ ^/u/(.*) {
        เขียนใหม่ ^/u/(.*) /p/?username=$1 สุดท้าย;
        # try_files $uri /p/?ชื่อผู้ใช้=$1;
    }

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

    ตำแหน่ง ~ \.php$ {
        client_max_body_size 8M;
        รวม fastcgi-php.conf;

        # ลดช่องโหว่ https://httpoxy.org/
        fastcgi_param HTTP_PROXY "";
        เปิด fastcgi_intercept_errors;
        fastcgi_pass 0.0.0.0:9000;
    }

    ตำแหน่ง ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        หมดอายุสูงสุด
        ปิด log_not_found;
    }
}

ฉันกำลังเขียนปลั๊กอิน WordPress และฉันต้องการให้ผู้ใช้ป้อน URL เช่น https://example.com/u/john71 และเปลี่ยนเส้นทางภายในไปที่ https://example.com/p/?username=john71

ทั้งคู่ ยู และ หน้า เป็นหน้า WordPress และ หน้า มีรหัสย่อที่อนุญาตให้ฉันดึงชื่อผู้ใช้

ฉันสามารถมี https://example.com/p/?username=john71แต่บางอย่างเช่น: https://example.com/u/john71 ดูดีขึ้น

ยินดีรับความช่วยเหลือเกี่ยวกับกฎหรือวิธีการเขียนใหม่

us flag
คุณควรทำส่วนกำหนดเส้นทางคำขอที่กำหนดเองใน WordPress ให้สมบูรณ์ หากคุณแยกตรรกะระหว่าง nginx และ WordPress คุณกำลังบังคับให้ผู้ใช้เพิ่มการกำหนดค่าเพิ่มเติม ดูตัวอย่าง https://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes
Score:0
ธง jp

ในที่สุด URI จะถูกเขียนใหม่ /index.php - ดังนั้น WordPress จะไม่เห็นการเขียนซ้ำภายในเพิ่มเติม

WordPress แยกวิเคราะห์คำขอดั้งเดิมซึ่งส่งผ่านไปยังพารามิเตอร์ REQUEST_URI (ซึ่งจะกำหนดไว้ใน fastcgi-php.conf ซึ่งอาจรวมถึงจากไฟล์อื่นที่เรียกว่า fastcgi_params).

คุณสามารถดำเนินการนี้ได้โดยการตั้งค่า REQUEST_URI และ SCRIPT_FILENAME โดยตรงก่อนการโทร fastcgi_pass - ตัวอย่างเช่น:

ตำแหน่ง ~ ^/u/(.*) {
    รวม fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param REQUEST_URI /p/?ชื่อผู้ใช้=$1;

    fastcgi_param HTTP_PROXY "";
    เปิด fastcgi_intercept_errors;
    fastcgi_pass 0.0.0.0:9000;
}

ฉันยังไม่ได้รวม fastcgi-php.conf เนื่องจากอาจมีก try_files คำสั่งที่จะไม่ทำงานในนี้ ที่ตั้ง.

mx flag
ขอบคุณริชาร์ด เป็นความคิดที่ดี แต่ฉันไม่สามารถทำมันได้ ฉันยังคงไม่พบ (404) ฉันพบปลั๊กอินนี้: https://wordpress.org/plugins/redirection/ ทำในสิ่งที่ฉันต้องการ
Ivan Shatsky avatar
gr flag
`SCRIPT_FILENAME` ควรมีชื่อไฟล์เต็มพร้อมพาธ `$document_root/index.php` แทน `/index.php` สำหรับกรณีนี้
Richard Smith avatar
jp flag
อ๊ะ! แก้ไขแล้ว. ขอบคุณ @IvanShatsky
mx flag
ฉันลองด้วย `$document_root/index.php` แต่ฉันก็ได้รับ 404 ด้วย มันได้ผลเมื่อฉันแทนที่ `/p/?username=$1` ด้วย `p=2154` (2154 คือ id ของเพจ) ฉันไม่รู้จักการกำหนดเส้นทางภายในของ WordPress ดีพอ ปลั๊กอิน `redirection` ใช้งานได้ดี ดังนั้นฉันจึงจัดการกับสิ่งนั้นในตอนนี้

โพสต์คำตอบ

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