Regex NGinx-重写与字符串匹配的URI的正确方法,而不是第二个字符串
伙计们 我正在使用前端Apache反向代理将应用程序迁移到NGinx反向代理 我正在尝试找到转换此规则的正确方法: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开头,但不包含字符
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;
}