Puncte:0

NGINX rescrie adresa URL pe wordpress, dar obține 404

drapel my

Am un site web WordPress unde URL-urile mele sunt scrise în prezent după cum urmează
http://example.com/for-sale/12345-aaa-123-street-bbb-city/

și aș dori să difuzez în continuare aceeași adresă URL, dar vreau ca adresa URL să arate ca
http://example.com/city/street/

Am creat o regulă de rescriere a rescrie de vânzare/([0-9]+)-aaa-(.*)-bbb-(.*) /$3/$2/ permanent;

Aceasta îmi rescrie adresa URL, dar returnează o eroare 404. Iată ce returnează jurnalul de rescriere

2021/11/04 04:48:39 [notificare] 23077#23077: *4643 redirecționare rescrisă: „/Vernon//539-Apache-County-Road-3144/”, client: 108.162.215.21, server: exemplu. , cerere: „GET /for-sale/20071-aaa-539-Apache-County-Road-3144-bbb-Vernon/ HTTP/1.1”, gazdă: „example.com”, referitor: „https://example. com/vernon/"
2021/11/04 04:48:40 [notificare] 23077#23077: *4646 „de vânzare/([0-9]+)-aaa-(.*)-bbb-(.*)” se potrivește cu „/ de vânzare/14808-aaa-35640A-Hwy-60-bbb-Vernon/", client: 172.70.98.47, server: example.com, cerere: „GET /for-sale/14808-aaa-35640A-Hwy-60 -bbb-Vernon/ HTTP/1.1”, gazdă: „example.com”, referitor: „https://example.com/vernon/”
2021/11/04 04:48:40 [notificare] 23077#23077: *4646 redirecționare rescrisă: „/Vernon//35640A-Hwy-60/”, client: 172.70.98.47, server: example.com, cerere: „ GET /for-sale/14808-aaa-35640A-Hwy-60-bbb-Vernon/ HTTP/1.1", gazdă: „example.com”, referitor: „https://example.com/vernon/”
2021/11/04 04:48:41 [notificare] 23077#23077: *4649 „de vânzare/([0-9]+)-aaa-(.*)-bbb-(.*)” nu se potrivește „/for-sale/19617-2926-DEER-HILL-Road-Heber-Arizona-85928/”, client: 108.162.245.49, server: example.com, cerere: „GET /for-sale/19617-2926-DEER -HILL-Road-Heber-Arizona-85928/ HTTP/1.1”, gazdă: „example.com”
2021/11/04 04:48:41 [notificare] 23077#23077: *4651 „de vânzare/([0-9]+)-aaa-(.*)-bbb-(.*)” se potrivește cu „/ de vânzare/6944-aaa-35640-Hwy-60-bbb-Vernon/", client: 172.69.35.180, server: example.com, cerere: „GET /for-sale/6944-aaa-35640-Hwy-60 -bbb-Vernon/ HTTP/1.1”, gazdă: „example.com”, referitor: „https://example.com/vernon/”
2021/11/04 04:48:41 [notificare] 23077#23077: *4651 redirecționare rescrisă: „/Vernon//35640-Hwy-60/”, client: 172.69.35.180, server: example.com, cerere: „ GET /for-sale/6944-aaa-35640-Hwy-60-bbb-Vernon/ HTTP/1.1", gazdă: "example.com", referitor: "https://example.com/vernon/"
2021/11/04 04:48:42 [notificare] 23077#23077: *4654 „de vânzare/([0-9]+)-aaa-(.*)-bbb-(.*)” se potrivește cu „/ de vânzare/18232-aaa-72-County-Road-8144-bbb-Vernon/", client: 172.172.35.168, server: example.com, cerere: „GET /for-sale/18232-aaa-72-County -Road-8144-bbb-Vernon/ HTTP/1.1”, gazdă: „example.com”, referitor: „https://example.com/vernon/”
2021/11/04 04:48:42 [notificare] 23077#23077: *4654 redirecționare rescrisă: „/Vernon//72-County-Road-8144/”, client: 172.172.35.168, server: example.com, cerere : „GET /for-sale/18232-aaa-72-County-Road-8144-bbb-Vernon/ HTTP/1.1”, gazdă: „example.com”, referitor: „https://example.com/vernon/ "

Nu sunt sigur dacă mă îndrept pe calea cea bună aici sau este greșită să fie folosită o regulă de rescriere în acest scenariu? Am încercat să plasez regula de rescrire în propria locație și am încercat diferite steaguri, dar acesta este cel mai aproape pe care l-am avut până acum.

Aici este configurația mea completă. Multumesc pentru orice ajutor.

Server {

  nume_server 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 on;
    root /var/www/example.com/public;
    index index.php;


    asculta 443 ssl http2; # gestionat de Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # gestionat de Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # gestionat de Certbot
    includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot


Locație / {

rescrie de vânzare/([0-9]+)-aaa-(.*)-bbb-(.*) /$3/$2/ permanent;
        try_files $uri $uri/ /index.php?$args;

        }


        # fastcgi
        locație ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS activat;
        fastcgi_param HTTP_SCHEME https;
        fastcgi_read_timeout 150;
        }

        #Cache fișiere statice cât mai mult posibil
        locație ~*.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar |bz)$ { expiră 365d;
        }
        locație ~ ^/(wp-admin|wp-login|ngx_pagespeed_statistics|ngx_pagespeed_global_statistics|ngx_pagespeed_message)$ { #auth_basic „Privat”;
        auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
        }

        locație ~* /wp-includes/.*.php$ {
        nega totul;
        access_log off;
        log_not_found off;
        }
        locație ~* /wp-content/.*.php$ {
        nega totul;
        access_log off;
        log_not_found off;
        }



}

Server {
    dacă ($gazdă = www.example.com) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot


    dacă ($gazdă = exemplu.com) {
        returnează 301 https://$host$request_uri;
   } # gestionat de Certbot


    nume_server example.com www.example.com;


    asculta 80;
    întoarce 404; # gestionat de Certbot


}
Ivan Shatsky avatar
drapel gr
Ai primit o pagină 404 personalizată WordPress sau una brută nginx? Se pare că este un WP care nu a înțeles URI-ul dvs. rescris. Îl puteți verifica manual introducând „https://example.com/Vernon//72-County-Road-8144/” în bara de adrese a browserului.
David avatar
drapel my
Da, este un 404 de la WordPress. "Pagina nu a fost gasita". Pagina originală în cauză ar fi fost https://example.com/for-sale/12356-aaa-72-County-Road-8144-bbb-Vernon/ și încerc să difuzez în continuare acea pagină, dar cu adresa URL afișat ca https://example.com/vernon/72-County-Road-8144/ și se pare că WordPress se așteaptă ca pagina respectivă să existe în această din urmă locație? Aveți idei la care trebuie să mă uit? Multumesc pentru ajutor.
Ivan Shatsky avatar
drapel gr
Da, WordPress se așteaptă ca pagina respectivă să existe.În timp ce, teoretic, este posibil să faceți un lucru invers, să rescrieți intern `/vernon/72-County-Road-8144` URI în `/for-sale/12356-aaa-72-County-Road-8144-bbb- Vernon` (dacă aveți un algoritm pentru a face o rescrie inversă) și cereți WP core să servească o pagină rescrisă în timp ce bara de adrese a browserului dvs. va afișa o adresă URL originală, mi se pare că orice încercați să faceți, alegeți o pagină greșită. mod de a o face.
David avatar
drapel my
Da, mi-a fost teamă că poate merg greșit. Din păcate, este un plugin imobiliar care generează structura URL-ului pe care încerc să o modific și nu este posibil să schimb structura permalink-ului în setările pluginului pentru ca acesta să afișeze mai întâi orașul, apoi adresa etc. Când am contactat dezvoltatorul mi-au sugerat să mă uit la rescrierea URL-ului pe partea de server. Dar acum văd că cu WordPress nu pot să-l pun pur și simplu pe Nginx să-l rescrie așa cum credeam.
djdomi avatar
drapel za
https://www.cyberciti.biz/faq/how-to-configure-nginx-for-wordpress-permalinks/ ar putea o șansă pentru această soluție de permalink
Puncte:0
drapel gr

Acesta nu este un răspuns, dar este prea lung pentru a fi un comentariu, așa că scriu asta ca răspuns.

Ceea ce încerci să obții este posibil. Cu toate acestea, pentru a-l implementa, veți avea nevoie de o stivă de software mai complexă. Ai nevoie de spațiu de stocare cheie-valoare (de ex. Redis), și un server web capabil să-l folosească în timp ce deservește o solicitare (de exemplu, nginx cu lua-nginx-modul și lua-resty-redis).

Iată (unul dintre) algoritmi posibili.

  • După ce primiți o solicitare, verificați dacă stocarea conține o valoare folosind URI-ul cererii ca cheie.
    • Dacă este, obțineți valoarea din stocare și utilizați-o ca URI pentru WordPress.
    • Dacă nu este, verificați dacă URI-ul se potrivește cu modelul nostru regex.
      • Dacă este, faceți următoarele:
        • genera URI rescris;
        • stocați URI-urile originale și rescrise ca cheie/valoare în stocare;
        • returnează o redirecționare cu un nou URI.
      • Dacă nu este, serviți cererea noastră URI în modul obișnuit.

O rețetă completă pentru implementarea acestei stive este cu siguranță în afara domeniului de aplicare al răspunsului obișnuit ServerFault, dar puteți lua asta ca pe o idee.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.