Puncte:1

Locația Nginx se potrivește cu regex an/lună/zi/*

drapel fm

Am un model de URL vechi pentru a redirecționa către noua locație în nginx.

O adresă URL curată tipică arată ca example.com/2021/06/13/78676.html?...

Încerc să potrivesc numărul de cifre din fiecare bloc, cum ar fi:

locație ~ „^[0-9]{4}/[0-9]{2}/[0-9]{2}/([0-9]+).html” {
   rescrie ^ /archive.php?q=$1;
}

Unde mai gresesc te rog...

Michael Hampton avatar
drapel cz
Care este problema pe care o ai?
TELA avatar
drapel fm
Hopa! iarta-ma. Am uitat să comentez directiva „return 404” a Certbot la sfârșitul fișierului. Am aplicat această redirecționare pentru pagini non https. totul merge bine. Mulțumesc
Puncte:2
drapel jp

Prima problemă este că toate URI-urile Nginx încep cu un lider /. Deci expresia ta obișnuită nu se va potrivi niciodată.

A doua problemă este că capturile numerice sunt suprascrise ori de câte ori este evaluată o nouă expresie regulată. Deci, în configurația dvs., $1 va fi mereu goală.

Ai putea folosi o captură numită:

locație ~ „^/[0-9]{4}/[0-9]{2}/[0-9]{2}/(?<valoare>[0-9]+)\.html" {
    rescrie ^ /archive.php?q=$valoare ultima;
}

Alternativ, plasați captura numerică în rescrie afirmație:

rescrieți „^/[0-9]{4}/[0-9]{2}/[0-9]{2}/(?<valoare>[0-9]+)\.html” /arhivă. php?q=$1 ultimul;

Sau folosiți a try_files afirmație în loc de rescrie:

locație ~ „^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([0-9]+)\.html" {
    try_files inexistente /archive.php?q=$1;
}
TELA avatar
drapel fm
Am descoperit că există o problemă și cu capturarea numită dacă cineva trece o variabilă GET „q” împreună cu adresa URL a cererii, cum ar fi /2021/06/13/78676.html?a=1&q=asdf . În acest caz, chiar și valoarea numită pare suprascrisă de new $q = asdf. Orice soluție?
Richard Smith avatar
drapel jp
Dacă doriți să păstrați ceilalți parametri (cum ar fi `a=1`), devine dificil. În caz contrar, utilizați un `?` final în valoarea de înlocuire din instrucțiunea `rewrite` și argumentele inițiale **nu** vor fi adăugate. De exemplu: `rewrite ^ /archive.php?q=$value? last;` - vezi [acest document](http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite).
drapel do
Btw repetând un punct discutat în altă parte, asigurați-vă că utilizați ghilimele duble pe astfel de șiruri de expresii regex care conțin paranteze, altfel nu va funcționa... de asemenea, nu ar trebui să fie nevoie să încheiați șirul cu niciun semn `$`.

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.