Кто бы ни нашел это онлайн и попытается скопировать предложенные ответы, будьте осторожны, если вы используете установку Virtualbox с пользовательскими портами. Мне пришлось изменить его, например, rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;где 4321 - это внешний порт Virtualbox, к которому подключается мой браузер nginx.
aexl
Ответы:
6
Я хотел бы предложить этот подход:
# 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;
}
Он использует поведение по умолчанию nginx - объединение слешей, поэтому нам не нужно заменять слеш, мы просто перенаправляем
'merge_slashes off' не имеет значения и не приводит к изменениям.
Anup Nair
1
Почему merge_slashes on;просто не работает? Nginx глючит?
Джонатан
1
@ Джонатан - я только что столкнулся с этим. Насколько я понимаю, merge_slashes onэто не делает то, что вы думаете. Он в основном говорит nginx принимать // и / и /// как одну косую черту (не объединять и не перенаправлять самостоятельно)
Эндрю Ньюби
1
Я говорю из опыта запуска нескольких рабочих серверов и серверов разработки для команды. Не делайте этого в nginx. Вместо этого используйте свой маршрутизатор на сервере приложений (JS / PHP и т. Д.).
Nginx не надежен для основной работы. Например, перенаправления, переписывания и ifпредложения недетерминированы, если вы измените настройку на использование SSL, обратного прокси-сервера, скрытых портов и т. Д. Таким образом, вы можете заставить его работать правильно в одной среде, но может оказаться невозможным работать в другой.
Придерживайтесь правильного языка программирования для решения проблем, даже такого простого, как объединение двойных слешей. Ты поблагодаришь меня позже.
Хотя я согласен с вашей точкой зрения, я считаю, что мы должны дать людям возможность составить собственное мнение по этому вопросу. Я предпочитаю Apache Nginx по той же причине, что и ваша. Обратите внимание, что Apache mod_rewrite также может рассматриваться как простой язык программирования. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
где 4321 - это внешний порт Virtualbox, к которому подключается мой браузер nginx.Ответы:
Я хотел бы предложить этот подход:
Он использует поведение по умолчанию nginx - объединение слешей, поэтому нам не нужно заменять слеш, мы просто перенаправляем
нашел здесь
источник
proxy_pass
Я нашел ответ KWO не работает. Глядя на мой журнал отладки, вот что происходит:
Я обнаружил, что это работает для меня:
Ссылка: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
источник
Попробуй это:
Для слешей> 3 может быть несколько перенаправлений или несколько групп слешей.
источник
merge_slashes on;
просто не работает? Nginx глючит?merge_slashes on
это не делает то, что вы думаете. Он в основном говорит nginx принимать // и / и /// как одну косую черту (не объединять и не перенаправлять самостоятельно)Я говорю из опыта запуска нескольких рабочих серверов и серверов разработки для команды. Не делайте этого в nginx. Вместо этого используйте свой маршрутизатор на сервере приложений (JS / PHP и т. Д.).
Nginx не надежен для основной работы. Например, перенаправления, переписывания и
if
предложения недетерминированы, если вы измените настройку на использование SSL, обратного прокси-сервера, скрытых портов и т. Д. Таким образом, вы можете заставить его работать правильно в одной среде, но может оказаться невозможным работать в другой.Придерживайтесь правильного языка программирования для решения проблем, даже такого простого, как объединение двойных слешей. Ты поблагодаришь меня позже.
источник
Мне нравится это решение:
См. Https://stackoverflow.com/a/27071557/548473
источник
URL example.com//dir1////dir2///dir3 и др. Попробуйте, это работает для меня
merge_slashes off; местоположение ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }
источник