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.