Puncte:0

Cum se redirecționează utilizatorul dacă fișierele imagine cu acces direct prin browser? [nginx]

drapel cn

Cum redirecționez dacă un utilizator încearcă să acceseze direct fișierele imagine numai în browser? Vreau să păstrez capacitatea de a încorpora imagini cu <img src="...">. Cum să redirecționezi de la

https://img.example.com/c/600x1200_90_webp/img-master/img/2022/01/03/08/04/54/95259215_p0_master1200.jpg

la

https://example.com/detail?id=95259215

Aceasta este conf. mea nginx

locație ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(?<nume fișier>.+\.(jpg|png|webp)) $" {
    returnează 301 https://example.com/detail?id=$filename;
}

Codul nu funcționează pentru că va merge https://example.com/detail?id=95259215_p0_master1200.jpg dar am nevoie de el pentru a tăia șirul după ultima cifră a numelui fișierului, așa că în acest caz, decupați _p0_master1200.jpg. De asemenea, nu știu cum să o fac dacă utilizatorul îl accesează prin browser.

Puncte:0
drapel us

Expresia ta obișnuită (?<nume fișier>.+\.(jpg|png|webp))$ capturează întregul nume de fișier în variabila nume de fișier. Pentru a extrage doar o parte înainte _ pentru a varia, utilizați în schimb următoarele:

(?<nume fișier>[0-9]+).+(?:jpg|png|webp)$

Acesta se potrivește doar cu numerele pentru nume de fișier variabilă (aș numi-o imagine_id pentru a fi mai descriptiv). https://regexr.com este un instrument bun pentru a lucra cu expresii regulate.

Pentru a limita afișarea numai la browsere, trebuie să utilizați modulul de referință http nginx.

Aceste două combinate, configurația ar arăta astfel:

locație ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(?<nume fișier>[0-9]+).+(?: jpg|png|webp)$" {
    referințe_valide nume_server;
    if ($invalid_referer = "0") {
        returnează 301 https://example.com/detail?id=$filename;
    }
}

nginx va verifica valoarea HTTP Referer. Dacă conține numele specificat în numele serverului câmp, va trimite redirecționarea. Câmpul referitor este setat de browser atunci când încarcă resurse pentru o pagină web.

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.