Nginx proste przekierowanie produktów ze starej do nowej kategorii


9

Robię przekierowania produktów ze starej do nowej kategorii.

Udało mi się sprawić, że działa z następującą zasadą:

rewrite ^/old-category/(.*) /new-category/$1;

Ale chcę wiedzieć, kiedy powinienem użyć znaku „linia końcowa” $ i jaka jest różnica w tym przypadku lub bez niego w moim przypadku. Na przykład:

rewrite ^/old-category/(.*)$ /new-category/$1;

Chcę również przekierować użytkowników, jeśli po prostu napiszą starą nazwę kategorii (bez produktów), czy powinienem utworzyć nową regułę tylko dla przekierowania kategorii lub mogę edytować powyższą regułę, aby działała w obu przypadkach.

Z góry dziękuję za odpowiedzi.

Odpowiedzi:


9

Odpowiadanie na pytania w celu ...

To

rewrite ^/old-category/(.*) /new-category/$1;

i to

rewrite ^/old-category/(.*)$ /new-category/$1;

jak napisano, są równoważne. .*Reguła pasuje do 0 lub więcej „wszystkiego”, więc $jest zbędny / nie naprawdę potrzebne.

$Terminator jest przydatna, gdy chcesz ciągów koniec meczu, który w szczególny sposób , na przykład

rewrite ^/old-category/(.*)\.php$ /new-category/$1;

przepisać tylko pliki PHP .

Jeśli chodzi o twoje drugie pytanie, jeśli dobrze zrozumiałem, chcesz to przekierować

http://example.com/old-category/

do tego

http://example.com/new-category/

Jeśli tak, jest to już zgodne z rewriteregułą, ponieważ .*pasuje do ZERO lub większej liczby znaków.


3
Dobre pytanie, dobra odpowiedź. Tak wiele osób ustawia domyślnie $ (lub domyślnie je pomija), nie zastanawiając się, co to właściwie oznacza. Za każdym razem, gdy widzę (. *) $, Kulę się. Nie próbowałem tego, ale może być tak, że pominięcie $ w tym przypadku może mieć nieco lepszą wydajność, ponieważ jest to kolejna reguła, którą musi sprawdzić regex. Byłoby interesujące uzyskać odpowiedź na to pytanie: D
Broco
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.