Điểm:0

NGINX viết lại URL trên wordpress nhưng nhận được 404

lá cờ my

Tôi có một trang web WordPress nơi các URL của tôi hiện được viết như sau
http://example.com/for-sale/12345-aaa-123-street-bbb-city/

và tôi vẫn muốn phân phối cùng một URL, nhưng tôi muốn URL trông giống như
http://example.com/city/street/

Tôi đã tạo một quy tắc viết lại của viết lại để bán/([0-9]+)-aaa-(.*)-bbb-(.*) /$3/$2/ vĩnh viễn;

Điều này viết lại URL của tôi nhưng trả về lỗi 404. Đây là những gì nhật ký viết lại trả về

04/11/2021 04:48:39 [thông báo] 23077#23077: *4643 chuyển hướng được viết lại: "/Vernon//539-Apache-County-Road-3144/", máy khách: 108.162.215.21, máy chủ: example.com , yêu cầu: "GET /for-sale/20071-aaa-539-Apache-County-Road-3144-bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example. com/vernon/"
04/11/2021 04:48:40 [thông báo] 23077#23077: *4646 "để bán/([0-9]+)-aaa-(.*)-bbb-(.*)" khớp "/ để bán/14808-aaa-35640A-Hwy-60-bbb-Vernon/", khách hàng: 172.70.98.47, máy chủ: example.com, yêu cầu: "GET /for-sale/14808-aaa-35640A-Hwy-60 -bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example.com/vernon/"
2021/11/04 04:48:40 [thông báo] 23077#23077: *4646 chuyển hướng được viết lại: "/Vernon//35640A-Hwy-60/", máy khách: 172.70.98.47, máy chủ: example.com, yêu cầu: " NHẬN /for-sale/14808-aaa-35640A-Hwy-60-bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example.com/vernon/"
2021/11/04 04:48:41 [thông báo] 23077#23077: *4649 "để bán/([0-9]+)-aaa-(.*)-bbb-(.*)" không khớp "/for-sale/19617-2926-DEER-HILL-Road-Heber-Arizona-85928/", khách hàng: 108.162.245.49, máy chủ: example.com, yêu cầu: "GET /for-sale/19617-2926-DEER -HILL-Road-Heber-Arizona-85928/ HTTP/1.1", máy chủ lưu trữ: "example.com"
04/11/2021 04:48:41 [thông báo] 23077#23077: *4651 "để bán/([0-9]+)-aaa-(.*)-bbb-(.*)" khớp "/ để bán/6944-aaa-35640-Hwy-60-bbb-Vernon/", khách hàng: 172.69.35.180, máy chủ: example.com, yêu cầu: "NHẬN /để bán/6944-aaa-35640-Hwy-60 -bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example.com/vernon/"
2021/11/04 04:48:41 [thông báo] 23077#23077: *4651 chuyển hướng được viết lại: "/Vernon//35640-Hwy-60/", máy khách: 172.69.35.180, máy chủ: example.com, yêu cầu: " GET /for-sale/6944-aaa-35640-Hwy-60-bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example.com/vernon/"
04/11/2021 04:48:42 [thông báo] 23077#23077: *4654 "để bán/([0-9]+)-aaa-(.*)-bbb-(.*)" khớp "/ để bán/18232-aaa-72-County-Road-8144-bbb-Vernon/", khách hàng: 172.172.35.168, máy chủ: example.com, yêu cầu: "GET /for-sale/18232-aaa-72-County -Road-8144-bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example.com/vernon/"
04/11/2021 04:48:42 [thông báo] 23077#23077: *4654 chuyển hướng được viết lại: "/Vernon//72-County-Road-8144/", máy khách: 172.172.35.168, máy chủ: example.com, yêu cầu : "NHẬN /for-sale/18232-aaa-72-County-Road-8144-bbb-Vernon/ HTTP/1.1", máy chủ lưu trữ: "example.com", liên kết giới thiệu: "https://example.com/vernon/ "

Tôi không chắc liệu mình có đang đi đúng hướng ở đây hay quy tắc viết lại có sai khi sử dụng trong trường hợp này không? Tôi đã thử đặt quy tắc viết lại vào vị trí của chính nó và đã thử các cờ khác nhau nhưng đây là lần gần nhất tôi có cho đến nay.

Đây là cấu hình đầy đủ của tôi. Cảm ơn vì bất kì sự giúp đỡ.

người phục vụ {

  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;
    viết lại_log vào;
    gốc /var/www/example.com/public;
    chỉ số index.php;


    nghe 443 ssl http2; # được quản lý bởi Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot


địa điểm / {

viết lại để bán/([0-9]+)-aaa-(.*)-bbb-(.*) /$3/$2/ vĩnh viễn;
        try_files $uri $uri/ /index.php?$args;

        }


        #nhanhcgi
        vị trí ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        bao gồm fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param bật HTTPS;
        fastcgi_param HTTP_SCHEME https;
        fastcgi_read_timeout 150;
        }

        #Cache các tệp tĩnh càng lâu càng tốt
        vị trí ~*.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar |bz)$ { hết hạn 365d;
        }
        vị trí ~ ^/(wp-admin|wp-login|ngx_pagespeed_statistics|ngx_pagespeed_global_statistics|ngx_pagespeed_message)$ { #auth_basic "Riêng tư";
        auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
        }

        vị trí ~* /wp-gồm/.*.php$ {
        Phủ nhận tất cả;
        truy cập_đăng xuất;
        log_not_found tắt;
        }
        vị trí ~* /wp-content/.*.php$ {
        Phủ nhận tất cả;
        truy cập_đăng xuất;
        log_not_found tắt;
        }



}

người phục vụ {
    nếu ($host = www.example.com) {
        trả lại 301 https://$host$request_uri;
    } # được quản lý bởi Certbot


    nếu ($host = example.com) {
        trả lại 301 https://$host$request_uri;
   } # được quản lý bởi Certbot


    server_name example.com www.example.com;


    nghe 80;
    trả lại 404; # được quản lý bởi Certbot


}
Ivan Shatsky avatar
lá cờ gr
Bạn đã nhận được trang 404 tùy chỉnh của WordPress hay trang nginx thô chưa? Có vẻ như đó là một WP không hiểu URI được viết lại của bạn. Bạn có thể kiểm tra thủ công bằng cách nhập `https://example.com/Vernon//72-County-Road-8144/` tại thanh địa chỉ trình duyệt của mình.
David avatar
lá cờ my
Vâng, đó là lỗi 404 từ WordPress. "Không tìm thấy trang". Trang ban đầu được đề cập sẽ là https://example.com/for-sale/12356-aaa-72-County-Road-8144-bbb-Vernon/ và tôi đang cố gắng vẫn phân phát trang đó nhưng với URL được hiển thị dưới dạng https://example.com/vernon/72-County-Road-8144/ và có vẻ như WordPress đang mong đợi trang đó tồn tại ở vị trí sau? Bất kỳ ý tưởng những gì tôi cần phải xem xét? Cảm ơn bạn đã giúp đỡ.
Ivan Shatsky avatar
lá cờ gr
Có, WordPress đang mong đợi trang đó tồn tại.Mặc dù về lý thuyết, có thể thực hiện một điều ngược lại, đó là viết lại nội bộ `/vernon/72-County-Road-8144` URI thành `/for-sale/12356-aaa-72-County-Road-8144-bbb- Vernon` (nếu bạn có thuật toán để viết lại ngược) và yêu cầu lõi WP cung cấp trang được viết lại trong khi thanh địa chỉ trình duyệt của bạn sẽ hiển thị một URL gốc, đối với tôi, có vẻ như bạn đang cố gắng làm bất cứ điều gì, bạn đã chọn sai cách để làm điều đó.
David avatar
lá cờ my
Vâng, tôi sợ rằng có lẽ tôi đã đi sai hướng. Thật không may, đó là plugin bất động sản đang tạo cấu trúc URL mà tôi đang cố thay đổi và không thể thay đổi cấu trúc permalink trong cài đặt plugin để nó hiển thị thành phố trước, sau đó là địa chỉ, v.v. Khi tôi liên hệ với nhà phát triển họ đề nghị tôi xem xét việc viết lại URL phía máy chủ. Nhưng bây giờ tôi thấy rằng với WordPress, tôi không thể để Nginx viết lại nó như tôi nghĩ.
djdomi avatar
lá cờ za
https://www.cyberciti.biz/faq/how-to-configure-nginx-for-wordpress-permalinks/ có thể là cơ hội cho giải pháp permalink này
Điểm:0
lá cờ gr

Đây không phải là một câu trả lời, nhưng quá dài để nhận xét, vì vậy tôi viết bài này như một câu trả lời.

Những gì bạn đang cố gắng để đạt được là có thể. Tuy nhiên, để thực hiện nó, bạn cần một ngăn xếp phần mềm phức tạp hơn. Bạn sẽ cần một số bộ lưu trữ khóa-giá trị (ví dụ: làm lại) và một máy chủ web có thể sử dụng nó trong khi phục vụ yêu cầu (ví dụ: nginx với lua-nginx-mô-đunlua-resty-redis).

Đây là (một trong những) thuật toán có thể.

  • Sau khi nhận được yêu cầu, hãy kiểm tra xem bộ lưu trữ có chứa một số giá trị hay không bằng cách sử dụng URI yêu cầu làm khóa.
    • Nếu đúng như vậy, hãy lấy giá trị từ bộ lưu trữ và sử dụng nó làm URI cho WordPress.
    • Nếu không, hãy kiểm tra xem URI có khớp với mẫu biểu thức chính quy của chúng tôi không.
      • Nếu có, hãy làm như sau:
        • tạo URI viết lại;
        • lưu trữ các URI gốc và được viết lại dưới dạng khóa/giá trị trong bộ lưu trữ;
        • trả lại một chuyển hướng với một URI mới.
      • Nếu không, hãy phục vụ URI yêu cầu của chúng tôi theo cách thông thường.

Một công thức hoàn chỉnh để triển khai ngăn xếp này chắc chắn nằm ngoài phạm vi câu trả lời ServerFault thông thường, nhưng bạn có thể coi đây là một ý tưởng.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.