Puncte:1

redirecționare internă wordpress folosind nginx

drapel mx

Am un site WordPress cu permalink-uri setate la Post name.

Folosind rescrierea Nginx, încerc să am o redirecționare internă (fără nicio modificare a adresei URL a browserului), dar până acum nu reușesc.

Funcționează, dar URL-ul se modifică

locație ~ ^/u/(.*) {
    rescrie ^/u/(.*) /p/?username=$1 redirecționare; 
}

Nu înțeleg de ce nu funcționează:

locație ~ ^/u/(.*) {
    # aceasta returnează 404
    rescrie ^/u/(.*) /p/?username=$1 ultimul;
}

Toată configurația

Server {
    asculta 80;
    asculta [::]:80;
    nume_server example.com;

    rădăcină /srv/www/html;
    error_log /var/log/nginx/error.log;
    index index.php;

    locație = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    locație = /robots.txt {
        permite totul;
        log_not_found off;
        access_log off;
    }

    locație ~ ^/u/(.*) {
        rescrie ^/u/(.*) /p/?username=$1 ultimul;
        # try_files $uri /p/?username=$1;
    }

    Locație / {
        try_files $uri $uri/ /index.php?$args;
    }

    locație ~ \.php$ {
        client_max_body_size 8M;
        includ fastcgi-php.conf;

        # Reduceți vulnerabilitățile https://httpoxy.org/
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors activat;
        fastcgi_pass 0.0.0.0:9000;
    }

    locație ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expira max;
        log_not_found off;
    }
}

Scriu un plugin WordPress și vreau ca utilizatorii să introducă adrese URL, cum ar fi https://example.com/u/john71 și redirecționează intern către https://example.com/p/?username=john71

Ambii u și p sunt pagini WordPress și p conține un cod scurt care îmi permite să recuperez numele de utilizator.

as putea avea https://example.com/p/?username=john71, dar ceva de genul: https://example.com/u/john71 arata mai bine.

Orice ajutor cu privire la regula sau abordarea de rescriere este binevenit.

drapel us
Ar trebui să faceți complet partea de rutare a solicitărilor personalizate în WordPress. Dacă împărțiți logica între nginx și WordPress, vă forțați utilizatorii să adauge o configurație suplimentară. Uită-te la https://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes, de exemplu.
Puncte:0
drapel jp

URI-ul este rescris în cele din urmă la /index.php - astfel încât rescrierea internă suplimentară nu este văzută niciodată de WordPress.

WordPress analizează cererea originală, care îi este transmisă în parametrul REQUEST_URI (care va fi definit în fastcgi-php.conf fișier, care probabil îl include dintr-un alt fișier numit fastcgi_params).

Este posibil să puteți face acest lucru setând REQUEST_URI și SCRIPT_FILENAME direct înainte de a suna fastcgi_pass - de exemplu:

locație ~ ^/u/(.*) {
    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param REQUEST_URI /p/?username=$1;

    fastcgi_param HTTP_PROXY "";
    fastcgi_intercept_errors activat;
    fastcgi_pass 0.0.0.0:9000;
}

Nu am inclus fastcgi-php.conf întrucât poate conţine a try_files declarație care nu va funcționa în acest sens Locație.

drapel mx
Mulțumesc, Richard. Este o idee bună, dar nu am putut să o fac să funcționeze; Continui să primesc Not Found (404). Am găsit acest plugin: https://wordpress.org/plugins/redirection/ face exact ceea ce am vrut să fac.
Ivan Shatsky avatar
drapel gr
`SCRIPT_FILENAME` ar trebui să conțină numele de fișier complet cu calea, `$document_root/index.php` în loc de `/index.php` pentru acest caz.
Richard Smith avatar
drapel jp
Hopa! Fix. Mulțumesc @IvanShatsky
drapel mx
Am încercat cu `$document_root/index.php`, dar am primit și 404. A funcționat când am înlocuit `/p/?username=$1` cu `p=2154` (2154 este id-ul paginii). Nu știu suficient despre rutarea internă WordPress. Pluginul „redirecționare” funcționează bine, așa că mă mulțumesc cu asta pentru moment.

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.