parametreleri olan bir url için nginx yeniden yazma


16

Bu tür bir URL var:

http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5

Bunu buna yönlendirmek istiyorum:

http://www.example.com/newparam/val3/val4

Bu yüzden bu yeniden yazma kuralını başarı ile denedim:

rewrite "/?param1=val1&param2=&param3=(.+)&param4=(.+)&param5=(.+)" http://www.example.com/newparam/$1/$2 redirect;

Nginx sorgu parametreleriyle başa çıkamıyor mu?

EDIT: Tüm dilekçeleri yeniden yazmak istemiyorum. Diğerlerini etkilemeden yalnızca bu URL'yi yeniden yazmam gerekiyor.

Yanıtlar:


15

Tamam, rzab'ın ilk yardımı sayesinde, kuralını bu çalışma çözümüne yeniden tanımladım:

location / {
    if ($args ~* "/?param1=val1&param2=&param3=[0-9]+&param4=.+&param5=[0-9]+") {
        rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
    }
}

Sonsuz özyinelemeden kaçınmak için bir koşul ekledim ve? kuralın sonunda ilk parametrelerden kurtulmak için . Mükemmel çalışıyor :)


1
Sorgu dizesi farklı bir parametre sırasına izin verir. Böylece, iförneğin daha param2önce gittiğinde çalışmayı durduracaksınız param1.
— Alexander Azarov

İlginç. Benim durumumda bu olmayacak çünkü bir e-postada tıklanabilir bir url, ama bilmek güzel. Teşekkürler.
— David Morales

4
konum = / {
  yeniden yazma ^ http://www.example.com/newparam/$arg_param3/$arg_param4;
}

Peki, $ arg_ ve sonra parametre adını yazmalı mıyım?
— David Morales

Evet, bu en kolayı olurdu.
— Martin Fjordvald

Tamam, ama tüm dilekçeleri yeniden yazmak istemiyorum. Diğerlerini etkilemeden yalnızca bu URL'yi yeniden yazmam gerekiyor.
— David Morales

Bazı testler yaptım. Bu kural sonsuz bir yönlendirme oluşturur. Çalışmam gereken kodla yeni bir cevap yazacağım. Teşekkürler :)
— David Morales

Muhtemelen, özyineleme önlemek için "location /" yanı sıra "location = /" ilan etmek gerekir. Sanırım ana rota olarak bir yere proxy_pass için sahip olacaksınız. "location = /" tam olarak / isteklerle eşleşir. Her neyse, $ args ile eşleşen herhangi bir istek parametrelere uyması dışında iyi görünüyor ? Param1 =
— val1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.