Регулярки nginx и реврайты

R
На сайте с 16.01.2015
Offline
36
1092

Добрый день друзья. Помогите пжст с формирование регулярного выражения и перенаправления в nginx. Хочется вырезать из урла данные после знака вопроса domain.com/less/ipx/25623/3717/dash.doc?win=y&lin=1 и перенаправить по другому адресу "domain.com/load/25623/url.hml?file=/less/ipx/25623/3717/dash.doc".

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1

Всё, что после вопросика - не участвует в регулярном выражении, а хранится в переменной $args и $arg_имя. Т.е. вам в location нужно написать условие с помощью оператора if и проверить $args

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
baas
На сайте с 17.09.2012
Offline
171
#2
recived:
Добрый день друзья. Помогите пжст с формирование регулярного выражения и перенаправления в nginx. Хочется вырезать из урла данные после знака вопроса domain.com/less/ipx/25623/3717/dash.doc?win=y&lin=1 и перенаправить по другому адресу "domain.com/load/25623/url.hml?file=/less/ipx/25623/3717/dash.doc".

Пример.

site.com/tag/q.html?pattern=%D0%9C%D0%B0%D1%81%D1%82%

нужно 301 редиректом отправлять
site.com/category/%D0%9C%D0%B0%D1%81%D1%82%D1%83%D

location = /tag/q.html {

if ($args ~ "pattern=(.*)") {
return 301 /category/$1;
}
}

Или так.

if ($query_string ~* "pattern=(.*)"){

return 301 /category/$1;
}

Чуть вида измените под себя.

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
R
На сайте с 16.01.2015
Offline
36
#3
Оптимизайка:
Всё, что после вопросика - не участвует в регулярном выражении, а хранится в переменной $args и $arg_имя. Т.е. вам в location нужно написать условие с помощью оператора if и проверить $args

Спасибо теперь понятно почему не получалось сделать

Пытался что-то типа того rewrite ^/less/ipx/25623/(.*)/(\?.*)$ /load/25623/url.hml?file=/less/ipx/25623/$1 permanent; (\?.*)$ вырезает все, от вопроса до конца строки.

Сообразил только на такое перенаправление.

location ~ ^/less/ipx/25623/(.*)/((.*).doc)$ {

return 301 http://domain.com/load/25623/url.hml?file=/less/ipx/25623/$1/$2

}

---------- Добавлено 30.05.2017 в 10:28 ----------

baas:
Пример.
site.com/tag/q.html?pattern=%D0%9C%D0%B0%D1%81%D1%82%

нужно 301 редиректом отправлять
site.com/category/%D0%9C%D0%B0%D1%81%D1%82%D1%83%D

location = /tag/q.html {

if ($args ~ "pattern=(.*)") {
return 301 /category/$1;
}
}

Или так.
if ($query_string ~* "pattern=(.*)"){

return 301 /category/$1;
}

Чуть вида измените под себя.

Мне именно удалить надо все то, что после знака вопроса идет. А все, что до, надо вырезать и вставить в новый урл.

---------- Добавлено 30.05.2017 в 10:47 ----------

Подскажите пожалуйста еще по такому вопросу. Получилось успешно перенаправить по новому адресу такой конструкцией

location ~ ^/less/ipx/25623/((.*).doc)$ {
return 301 http://domain.com/load/25623/url.hml?file=/less/ipx/25623/$1;
}

В итоге нужная перенаправляется на нужную мне ссылку domain.com/load/25623/url.hml?file=/less/ipx/25623/3717/dash.doc.

Но все doc файлы лежат на другом сервере и перенаправляются через proxy_pass. И вводя эту конструкцию, все doc файлы начинают искаться без перенаправлений. Даже если прописать в конструкцию proxy_pass.

J
На сайте с 20.02.2014
Offline
120
jkm
#4

Если я правильно понял задачу, то должно быть как-то так:

location ~ ^/less/ipx/25623/((.*).doc)$ {

rewrite ^ /load/25623/url.hml?file=/less/ipx/25623/$1? break;
# а тут уже ваш proxy_pass
}

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