Ktokolwiek znalazł to w Internecie i próbuje skopiować i wkleić sugerowane odpowiedzi, strzeż się, jeśli używasz konfiguracji Virtualbox z niestandardowymi portami. Musiałem to zmienić np. rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;Tam, gdzie 4321 jest zewnętrznym portem Virtualbox, do którego łączy się moja przeglądarka.
aexl
Odpowiedzi:
6
Chciałbym zaproponować takie podejście:
# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
Wykorzystuje domyślne zachowanie nginx - scalanie ukośników, więc nie musimy zamieniać ukośników, po prostu przekierowujemy
„merge_slashes off” nie miało znaczenia i nie spowodowało żadnych zmian.
Anup Nair
1
Dlaczego merge_slashes on;po prostu nie działa? Czy Nginx jest buggy?
Jonathan
1
@Jathanathan - właśnie to spotkałem. Rozumiem, że merge_slashes onto nie robi tego, co myślisz. Mówi w zasadzie, że nginx ma traktować // i / i /// jako pojedynczy ukośnik (nie scalać i przekierowywać samodzielnie)
Andrew Newby
1
Mówię z doświadczenia w prowadzeniu wielu serwerów produkcyjnych i serwerów deweloperskich dla zespołu. Nie rób tego w nginx. Zamiast tego użyj routera na serwerze aplikacji (JS / PHP itp.).
Nginx nie jest wiarygodny w przypadku prac merytorycznych. Na przykład przekierowania, przepisywania i ifklauzule nie są deterministyczne, jeśli zmienisz konfigurację tak, aby korzystała z protokołu SSL, odwrotnego proxy, ukrytych portów i tak dalej. Może więc sprawić, że będzie działał poprawnie w jednym środowisku, ale może być niemożliwe, aby działał w innym.
Trzymaj się odpowiedniego języka programowania do rozwiązywania problemów, nawet tak prostych jak łączenie podwójnych ukośników. Podziękujesz mi później.
Chociaż zgadzam się z twoim poglądem, uważam, że powinniśmy dać ludziom możliwość wyrażenia własnej opinii na ten temat. Wolę Apache od Nginx z tego samego powodu niż twój. Uwaga: Apache mod_rewrite może być również uważany za prosty język programowania. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
Tam, gdzie 4321 jest zewnętrznym portem Virtualbox, do którego łączy się moja przeglądarka.Odpowiedzi:
Chciałbym zaproponować takie podejście:
Wykorzystuje domyślne zachowanie nginx - scalanie ukośników, więc nie musimy zamieniać ukośników, po prostu przekierowujemy
znaleziono tutaj
źródło
proxy_pass
Znalazłem odpowiedź KWO na nie działa. Patrząc na mój dziennik debugowania, dzieje się tak:
Odkryłem, że to zadziałało dla mnie:
Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
źródło
Spróbuj tego:
Może istnieć wiele przekierowań dla ukośników> 3 lub wiele grup ukośników.
źródło
merge_slashes on;
po prostu nie działa? Czy Nginx jest buggy?merge_slashes on
to nie robi tego, co myślisz. Mówi w zasadzie, że nginx ma traktować // i / i /// jako pojedynczy ukośnik (nie scalać i przekierowywać samodzielnie)Mówię z doświadczenia w prowadzeniu wielu serwerów produkcyjnych i serwerów deweloperskich dla zespołu. Nie rób tego w nginx. Zamiast tego użyj routera na serwerze aplikacji (JS / PHP itp.).
Nginx nie jest wiarygodny w przypadku prac merytorycznych. Na przykład przekierowania, przepisywania i
if
klauzule nie są deterministyczne, jeśli zmienisz konfigurację tak, aby korzystała z protokołu SSL, odwrotnego proxy, ukrytych portów i tak dalej. Może więc sprawić, że będzie działał poprawnie w jednym środowisku, ale może być niemożliwe, aby działał w innym.Trzymaj się odpowiedniego języka programowania do rozwiązywania problemów, nawet tak prostych jak łączenie podwójnych ukośników. Podziękujesz mi później.
źródło
Podoba mi się to rozwiązanie:
Zobacz https://stackoverflow.com/a/27071557/548473
źródło
URL example.com//dir1////dir2///dir3 i więcej Wypróbuj to, działa dla mnie
merge_slashes off; lokalizacja ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }
źródło