2013-12-11 67 views
0

我使用nginx的1.4.3,并试图匹配长字符串或子长的URL是这样的:匹配子在nginx的位置

  1. 长的URL没有任何的正则表达式

    location ~* /index.php?/english/Kbase/Article/IRS { 
          proxy_pass   http://backend; 
          proxy_cache  kbase-cache; 
          <...> 
    } 
    

    结果:没有什么是匹配的,但这样的网址存在。

  2. 长的URL与正则表达式

    location ~* /idx/index.php?/Kbase/branch/Article/\d+.* { 
          proxy_pass   http://backend; 
          <....> 
    } 
    

    结果:没有匹配的新闻

  3. location ~* /idx/index.php?/Tickets/Ticket/ListAll/[\d,]*/6/[\d,]*/[\d,]*.* { 
          proxy_pass   http://backend; 
          <....> 
    } 
    

    结果:没有匹配的新闻

  4. location ~* \.(jpg|jpeg|gif|png)$ { 
          root /opt/httpdocs;    
    } 
    

    结果:工作正常。

  5. location/{ 
          proxy_pass   http://backend; 
    } 
    

    结果:工作正常。

例子1,2,3:我尝试了所有的变化来匹配至少子字符串。第条。, ,它甚至不起作用。* IRS不起作用,但第四个例子工作正常。

我错过了什么或什么?请指教。

+3

的'?'意味着前述'p'是可选的。你的意思是一个字面的??你需要转义它('\?')。 –

+0

是的,即使我逃脱\?它仍然不匹配。甚至最简单的表单位置〜。* IRS $ {return 410; }不起作用。我错过了什么? – user3091890

回答

0

您缺少必须终止正则表达式的$符号。

E.g.

location ~* /idx/index.php\?/Kbase/branch/Article/\d+.* { 

必须是

location ~* /idx/index.php\?/Kbase/branch/Article/\d+.*$ {