2015-04-07 66 views
1

我遇到了我的正则表达式的麻烦,不知道它有什么问题。它将使用orls/f而不是orls/f?p=4550返回一个URi。当我通过https://secure.toto02.com/orls/myservice/f?p=4550Nginx:位置正则表达式不工作

我的conf文件低于

location ~ "^/([a-zA-Z]+)/myservice/(.+)$" { 

    error_log /var/log/nginx/error-server.log notice; 
    rewrite_log on; 

    #proxy_set_header Host  $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header  X-Forwarded-Proto $scheme; 


    proxy_pass http://192.168.3.45:8080/orls/$2;  
    proxy_redirect http://192.168.3.45:8080/orls/ https://secure.toto02.com/$1/myservice/ ;   
} 

谁能帮助?

+0

我使用转义字符''\\在你目前的正则表达式,我可以看到它正确地捕捉你想要的组。 https://regex101.com/r/vI6rG3/1。问题是什么 ? – apgp88

+0

我的问题是来形式第二次捕获它似乎只是成熟的'f'而不是'f?p = 4550'.I使用了你的建议,但它仍然无法正常工作 – skip87

+0

你确定这是一个正则表达式问题吗?难道nginx的位置不包含查询吗? (我无法从文档中找到)。您可以尝试对第二个捕获组(如f \ p = 4550)进行“硬编码”并查看会发生什么...... – Attilio

回答

2

捕获位置不包含查询字符串。您可以通过$is_args$args变量,像这样手动包括它:

proxy_pass http://192.168.3.45:8080/orls/$2$is_args$args;