在nginx位置匹配子字符串

时间:2013-12-11 16:36:57

标签: regex nginx location

我正在使用nginx 1.4.3并尝试在长网址中匹配长字符串或子字符串,如下所示:

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

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

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

  2. 带有正则表达式的长网址

    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;
    }
    

    结果:工作正常。

  6. 示例1,2,3:我尝试了所有变体以匹配至少substring。 Article。, 它甚至不起作用。* IRS不起作用,但第四个例子工作正常。

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

1 个答案:

答案 0 :(得分:0)

你错过了必须终止正则表达式的$符号。

E.g。

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

必须是

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