2011-05-02 28 views
16

Kullanıcının adı (cookie'de) $ request_uri içinde bulunursa baypas etmem gereken bir önbelleğe alma sistemim var. Böyle bir şey yapmaya çalışıyorum, ancak değişkenleri normal ifadeye göre enterpolasyona alamıyorum. Herhangi bir öneri hoş lütfen?nginx içinde bir değişken nasıl kullanılır "if" düzenli ifade

$ me değişkenini cookie'den gayet iyi ayarlayabilirim; Ben sadece regex içine interpolate için alamıyorum.

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ $me) { set $chk ""; } 
if ($chk == "need") { rewrite^/testing } 

Hep böyle şeyler denedim:

if ($uri ~ "by-{$me}") { set $chk ""; } 

teşekkürler! -Kevin

cevap

9

Tam olarak sorduğum şey bu değildi, ama bence amaç benim için çalışacak. Bir başkasının bildiği bir nginx PCRE regexinin içindeki bir değişkeni nasıl enterpolasyon yapacağımı merak ediyorum!

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ /by-([^-]+)/) { set $by $1; } 
if ($by = $me) {set $chk "";} 
+2

İlk satırda bir sözdizimi hatası var

bir listesini maç için menşe istedi

galiba. Çift eşittir operatör orada olmamalıdır. Sanırım bu bir saniye için * sorunumdu, ama onları bir yapılandırma dosyasına yerleştirmek, herhangi bir başlatma öncesi çekleri geçmeyecek. – pospi

0

Sadece değişkenin önüne $ koyarak regex ifadesi içinde bir değişken dahil etmek mümkündür ... gerek senin durumunda $ {}

yüzden herhalde yapmaya

if ($uri ~ "by-$me") { set $chk ""; } 

normal ifadesi bunun daha karmaşık bir regex kural

için böyle çalışmak yaşadım by-kevin

eşit olacaktır Ben mümkün alan adları

set $domainWhitelist "yahoo\.com|google\.com|foo\.com"; 
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") { 
... 
}