Puncte:1

NGINX Rescrie interogarea ca cale?

drapel gb

Ce incerc sa fac:

Convertit

/posts/?post={randomnumber-atoF}
sau
/posts?post=120430awasdfwasfw

la

/posts/120430awasdfwasfw

Blocul meu de server (până acum)

Server {
        asculta 80 default_server;
        asculta [::]:80 default_server;
        rădăcină /forum;
        index index.php;
        server_name forum.example.net;
        Locație / {
                try_files $uri $uri/ =404;
        }
        # treceți scripturile PHP către serverul FastCGI
        #
        locație ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        locație ~ /\.ht {
                nega totul;
        }
}

Serverul primește adresa URL de la un alt proxy Nginx (un alt server la distanță). (și acest server are SSL, portul 443)

Articole pe care le-am încercat:

rescrie ^/posts/index.php /posts/$arg_post permanent;

Editați | ×:

Îmi pare rău, nu am spus, cea mai mare parte a interogării intră în Index, deoarece? Postul este o interogare, într-o bază de date. Vreau să o fac astfel încât să nu aveți nevoie de interogare, dar mergeți la {post number}

drapel sv
Bun venit la ServerFault. `if ($arg_post != "") { rescrie ^/posts/ /posts/$arg_post? permanent; }` este probabil să funcționeze.
Nolan O avatar
drapel gb
Am încercat codul dvs. de mai sus și ajunge la un 404 (dacă post={post number} nu este găsit în DB, returnează 404) Există o modalitate de a rescrie adresa URL păstrând /posts/?post=333 (acționați ca? fără?)
djdomi avatar
drapel za
Cum urmează să se afișeze, ce URL ar trebui să fie și este afișată acum, comentariul dvs. nu o face suficient de clar
Nolan O avatar
drapel gb
Cum ar trebui să vadă PHP adresa URL: ``` /posts?post=12345 ``` Și utilizatorul final ar trebui să vadă ``` /posts/12345 ```
Puncte:0
drapel sv

Titlul postării ar putea fi „conversia / rescrie calea URL la interogare”. Oricum, conform editării și comentariilor, rescrie ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id; poate funcționa. Nu este nevoie de utilizare permanent steag pentru rescrie. Dacă utilizați permanent, utilizatorul va fi redirecționat.

Server {
        asculta 80 default_server;
        asculta [::]:80 default_server;
        rădăcină /forum;
        index index.php;
        server_name forum.example.net;

        rescrie ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id;

        Locație / {
                try_files $uri $uri/ =404;
        }
        # treceți scripturile PHP către serverul FastCGI
        #
        locație ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        locație ~ /\.ht {
                nega totul;
        }
}
Nolan O avatar
drapel gb
după ce îl rulez, primesc această eroare: ``` 2021/07/07 08:51:19 [eroare] 244184#244184: *4 rescriere sau ciclu de redirecționare internă în timp ce redirecționați intern către „/posts/index.php”, client: *******.**. ***, server: forum.example.net, cerere: „GET /posts/?1318131055449140129 HTTP/1.1”> 1.1", gazdă: "192.168.0.195" ```
drapel sv
Greseala mea. Am actualizat răspunsul acum.
Nolan O avatar
drapel gb
Există o modalitate de a face rescrierea numai dacă fișierul nu este găsit? ca dacă ``` /posts/file``` merge la acel fișier, dar dacă ```/posts/file {cod de eroare 404}``` atunci încercați să rescrieți?
drapel sv
Poate fi posibil. Creați o întrebare nouă, astfel încât să poată fi văzută de toată lumea pentru un posibil răspuns.
Nolan O avatar
drapel gb
de fapt, această postare a rezolvat-o pentru mine: (jusr a înlocuit ` location /directory ` cu ` location /posts/ ` postați link [aici](https://serverfault.com/questions/767440/nginx-rewrite-rule-subfolder-404-error)

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.