nginx rewrite - убрать повторяющиеся слеши "/"

G
На сайте с 19.07.2009
Offline
39
10280

Здравствуйте.

Необходимо в nginx заменить все повторяющиеся слеши типа "111////222//33.html" на "111/222/33.html"

Пишу в location / {} так

rewrite "^/(.*)(//*)(.*)$" /$1/$3? permanent;

и так

rewrite "(.*)\/{2,}(.*)" $1/$2? permanent;

и так

rewrite "(.*)/{2,}(.*)" $1/$2? permanent;

и так

 rewrite "(.+)\/\/(.+)" $1 permanent;

ничего не выходит.

Но вот заметил что если прописать перед ним

 rewrite "^(.*)\.htm$" $1.html? permanent;

и в строке запроса будет 111////222//33.htm (без последнего L), то редирект срабатывает и убираются все лишние слеши.

Прошу подсказать как правильно убрать повторяющиеся слеши "/", в любом случае.

Заранее спасибо.

MirUrokov.ru - ГДЗ (готовые домашние задания), видео уроки, открытые уроки, онлайн калькуляторы. (http://mirurokov.ru)
siv1987
На сайте с 02.04.2009
Offline
427
#1

На реврайте по моему никак. Это делается на php

if(strpos('//', $_SERVER['REQUEST_URI']) !== false){
$uri = preg_replace('#/{2,}#', '/', $_SERVER['REQUEST_URI']);

header('Location: '.$uri, false, 301);
exit;
}
G
На сайте с 19.07.2009
Offline
39
#2

Спасибо, но мне нужно именно на nginx, без вмешательства php (хочу поставить голый nginx для статики и все, там больше ничего не будет)

siv1987
На сайте с 02.04.2009
Offline
427
#3

Значит именно на nginx никак, если он в реврайте не видит многослешие, иначе первый вариант должен был сработать.

Попробуйте еще так

rewrite // $0 permanent;

G
На сайте с 19.07.2009
Offline
39
#4

Попробовал. Пишет

nginx: [emerg] unknown "0" variable

nginx: configuration file nginx.conf test failed

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5
⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
G
На сайте с 19.07.2009
Offline
39
#6

На 2 минуты я был самым счастливым человеком на свете, потому что думал - все проблема решена. Но нет, попробовал поставить merge_slashes в http и server - все равно НЕ работает. Я в шоке.

IL
На сайте с 20.04.2007
Offline
435
#7
gooooodru:
Но нет, попробовал поставить merge_slashes в http и server - все равно НЕ работает. Я в шоке.

А что ставил-то? off, надеюсь?

Убираем объединение слэшей, и делаем редирект "ручками"

merge_slashes off;
rewrite (.*)//+(.*) $1/$2 permanent;
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
G
На сайте с 19.07.2009
Offline
39
#8

ivan-lev, прямо в точку. Я то ставил on... и ждал чуда )))

Спасибо огромнейшее.

PS: странно но заработало только если выставить глобальный merge_slashes off в http, если ставить его в server - почему-то не работает.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий