Редирект для Nginx

D
На сайте с 28.06.2008
Offline
1101
272

Написал редирект (конечный урл рабочий, проверено) для Nginx, но почему то не работает.

Где ошибся?

location ~ \.php$ {
.....         

if ($args ~* "topx-id=(\d+)") {
     rewrite ^/index\.php?option=com_firm&view=diplom&format=raw&topx-id=(\d+)$ /templates/firm/diplom/default?topx-id=$1;
}
.....


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

domain.ru/path?query

rewrite как и location работает только с /path.

Переменные $1..$9 будут перезаписаны ещё на этапе проверки шаблона rewrite ^/index\.php$

и пропадёт всё что ранее было сохранено с помощью if ($args ~* "topx-id=(\d+)") {

Нужно именованное выделение в регулярном выражении (?<name>pattern)

Ну и если нужно перенаправление с кодом 301, то добавить флаг permanent.

Если в строке замены указаны новые аргументы запроса, то предыдущие аргументы запроса добавляются после них.

Если такое поведение нежелательно, можно отказаться от этого добавления, указав в конце строки замены знак вопроса.

if ($args ~* "topx-id=(?<topx_id>\d+)") {
     rewrite ^/index\.php$ /templates/firm/diplom/default?topx-id=$topx_id? permanent;
}
J
На сайте с 20.02.2014
Offline
120
jkm
#2

Или использовать $request_uri  там  первоначальный запрос целиком с аргументами.

if ($request_uri ~ "/index.php\?.*topx-id=(\d+)") {
    return 301 /templates/firm/diplom/default?topx-id=$1;
}
D
На сайте с 28.06.2008
Offline
1101
#3

Большое спасибо, все заработало и отдельное спасибо за объяснение, стало понятно почему!

P.S. GPT-3 кстати так и не помог, как бы я не перефразировал писал либо чушь либо у вас все ок ))

D
На сайте с 28.06.2008
Offline
1101
#4

Снова я за помощью с той же проблемой ибо опять GPT не помог, 

нужно чтобы была переадресация с

/scripts/informer.php?chislo=5&imagenm=1&color=1

на 

/informer?chislo=5&imagenm=1&color=1

который будет работать внутри 

location ~ \.php$ {

}

Уже часа 2 пробую, все что GPT советовала испробовал (((  Если это важно - это будет ссылка в <iframe

P.S. причем пару вариантов работали вроде бы - но переставали в режиме инкогнито, это для меня вообще загадка.

J
На сайте с 20.02.2014
Offline
120
jkm
#5
Тут всё почти как в прошлый раз.
if ($request_uri ~ "^/scripts/informer\.php\?chislo=5&imagenm=1&color=1$") {
    return 301 /informer?chislo=5&imagenm=1&color=1;
}


if ($args ~ "^chislo=5&imagenm=1&color=1$") {
    rewrite ^/scripts/informer\.php$ /informer permanent;
}
D
На сайте с 28.06.2008
Offline
1101
#6
Спасибо, снова выручили!

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