Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex NGinx-重写与字符串匹配的URI的正确方法,而不是第二个字符串_Regex_Apache_Nginx_Nginx Reverse Proxy - Fatal编程技术网

Regex NGinx-重写与字符串匹配的URI的正确方法,而不是第二个字符串

Regex NGinx-重写与字符串匹配的URI的正确方法,而不是第二个字符串,regex,apache,nginx,nginx-reverse-proxy,Regex,Apache,Nginx,Nginx Reverse Proxy,伙计们 我正在使用前端Apache反向代理将应用程序迁移到NGinx反向代理 我正在尝试找到转换此规则的正确方法: RewriteCond %{REQUEST_FILENAME} ^/web RewriteCond %{REQUEST_FILENAME} !^/(.*)-staging/(.*) RewriteRule /web/?(.*)$ https://mydomainename/$1 [L,NE,QSA,R=307] 根据我的理解,这意味着“如果请求的文件名以/web开头,但不包含字符

伙计们

我正在使用前端Apache反向代理将应用程序迁移到NGinx反向代理

我正在尝试找到转换此规则的正确方法:

RewriteCond %{REQUEST_FILENAME} ^/web
RewriteCond %{REQUEST_FILENAME} !^/(.*)-staging/(.*)
RewriteRule /web/?(.*)$ https://mydomainename/$1 [L,NE,QSA,R=307]
根据我的理解,这意味着“如果请求的文件名以/web开头,但不包含字符串“-staging/”,则使用307 HTTP重定向重定向到不带/web的同一URI

我一直在尝试使用位置来获得这个结果,然后使用正则表达式(试图防止使用邪恶的“如果”),但没有办法,这超出了我的知识范围


有人能帮我找到正确的方法吗(网站流量会很大,所以需要优化),请?提前谢谢。

你可以使用否定的正则表达式断言来处理这个问题(关于这个主题的好文章是):


为了获得更好的性能,我建议启用并使用。请注意,您的系统PCRE库必须在启用此功能的情况下编译(或者您可以从具有自定义PCRE库的源代码中自行构建nginx).

太棒了!我尝试了这个选项,但我发现正确的解决方案中只有几个字符,我认为这是不可能的。效果很好,非常感谢。我将按照建议查看PCRE JIT,非常感谢!
location ~ ^/web/?(?!.*-staging/)(.*)$ {
    return 307 https://mydomainname/$1$is_args$args;
}