Puncte:1

Redirecționare Ngnix pentru subdirectoare pe mai multe niveluri

drapel ma

Am o adresă URL ca următoarea structură:

xyz/asset.html
abc/test.html
xyz/abc/test.html
xyz/abc/qwerty/test2.html

Aș dori să redirecționez:

xyz/asset.html la xyz/asset

xyz/abc/test.html la xyz/abc/test

xyz/abc/qwerty/test2.html la xyz/abc/qwerty/test2

În prezent, am această regulă de redirecționare în configurația mea ngnix și funcționează pentru redirecționarea directorului de prim nivel:

locație ~ ^/(xyz|abc).html { return 301 /$1; }

Acest lucru funcționează pentru primul nivel de direct, dar nu funcționează pentru subdirectoare. Cum să realizezi acest lucru? Multumesc pentru ajutor.

Puncte:1
drapel sv

Există mai multe moduri de a rezolva acest lucru. Iată un astfel de mod...

Primul pas este să capturați partea din URI care trebuie rescrisă. Apoi, putem face redirecționarea folosind fie a Locație blocare sau folosire rescrie condiție.

Folosind Locație bloc cu numit captura...

locație ~ ^/(?<variabilă>[/a-zA-Z0-9]+)\.html$ { return 301 /$variabilă; }

Sau

locație ~ ^/([/a-zA-Z0-9]+)\.html$ { return 301 /$1; }

Folosind rescrie...

rescrie ^/(?'custom_url'[/a-zA-Z0-9]+)\.html$ /$custom_url permanent;

Nginx acceptă capturi numite folosind următoarea sintaxă:

?<nume> Sintaxă compatibilă cu Perl 5.10, acceptată începând cu PCRE-7.0
?'nume' Sintaxă compatibilă cu Perl 5.10, acceptată începând cu PCRE-7.0
?P<nume> Sintaxă compatibilă Python, acceptată începând cu PCRE-4.0

Ref: https://nginx.org/en/docs/http/server_names.html (sub antet Expresii regulate nume).

drapel ma
Multumesc pentru raspuns Pothi. Am încercat regula de locație pe care mi-ai oferit-o. Funcționează pentru sub-dir de nivel 2 (xyz/abc/test.html la xyz/abc/test), dar nu pentru (yz/abc/qwerty/test2.html la xyz/abc/qwerty/test2).
drapel sv
Dacă ați folosit regula „locație”, atunci asigurați-vă că aveți și o regulă implicită „locație”, cum ar fi „locație / {}”. Iată un exemplu de depozit pentru a testa scenariul de mai sus cu adresa URL de testare disponibilă (temporar pentru moment)... https://github.com/pothi/qa-nginx/tree/main/serverfault/1070388
drapel ma
Multumesc amice! Asta a fost de ajutor. A mers.

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.