Как удалить двойную косую черту в URL, обслуживаемых nginx?

10917
codecowboy

Мне нужно скопировать следующие правила переписывания Apache в конфигурации nginx. Что такое nginx эквивалентно:

RewriteCond % ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L] 

Целевая среда - Ubuntu 12.04

7
http://stackoverflow.com/questions/14832780/nginx-merge-slashes-redirect cnst 11 лет назад 0
Кто бы ни нашел это в сети и попытался скопировать предложенные ответы, ** остерегайтесь **, если вы используете установку Virtualbox с пользовательскими портами. Мне пришлось изменить его, например, на `rewrite (. *) // + (. *) $ Схема: // $ host: 4321 $ 1 / $ 2 постоянный;` где * 4321 * - это внешний порт Virtualbox'd nginx мой браузер подключается к. aexl 6 лет назад 0

3 ответа на вопрос

3
SleepWalker

I'd like to suggest this approach:

# 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; } 

It uses the default behaviour of nginx — merging of slashes, so we do not need to replace slashes, we simply redirecting

found here

«если» - зло: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ MacroMan 6 лет назад 1
2
DaveQB

Я нашел ответ KWO не работает. Глядя на мой журнал отладки, вот что происходит:

2014/08/18 15:51:04 [отладка] 16361 # 0: 1 http-сценарий регулярное выражение: "(. ) // + (. *)" 2014/08/18 15:51:04 [уведомление] 16361 # 0 : 1 "(. ) // + (. *)" Не совпадает "/ contact-us /", клиент: 59.167.230.186, сервер: * .domain.edu, запрос: "GET ////// contact -us //// HTTP / 1.1 ", хост:" test.domain.edu "

Я обнаружил, что это работает для меня:

if ($request_uri ~* "\/\/") { rewrite ^/(.*) $scheme://$host/$1 permanent; } 

Ссылка: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/

Ссылка на ссылку - это то, что вам нужно проверить. Правильное решение там. Я постараюсь отредактировать ответ. Anup Nair 5 лет назад 0
0
kwo

Попробуй это:

merge_slashes off; rewrite (.*)//+(.*) $1/$2 permanent; 

Для слешей> 3 может быть несколько перенаправлений или несколько групп слешей.

'merge_slashes off' ничего не меняет и не приводит к изменениям. Anup Nair 5 лет назад 0

Похожие вопросы