Как убрать двойной слеш в URL-адреса с помощью nginx?

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

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

целевая среда Ubuntu 12.04

4
задан codecowboy
27.12.2022 15:43 Количество просмотров материала 2531
Распечатать страницу

3 ответа

Я хотел бы предложить такой подход:

# 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-слияние косых черт, поэтому нам не нужно заменять косые черты, мы просто перенаправляем

найти здесь

3
отвечен SleepWalker 2022-12-28 23:31

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

2014/08/18 15:51:04 [debug] 16361#0:1 регулярное выражение сценария http:" (.) / / +(.*)" 2014/08/18 15:51: 04 [Примечание] 16361#0:1 "(.) / / +(.*)" не соответствует "/связаться с нами/", клиент: 59.167.230.186, сервер: *.domain.edu запрос: "получить //////свяжитесь с нами//// НТТР/1.1", хозяин: "test.domain.edu"

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

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

Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/

2
отвечен DaveQB 2022-12-29 01:48

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

merge_slashes off;
rewrite (.*)//+(.*) / permanent;

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

0
отвечен kwo 2022-12-29 04:05

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх