nginx不区分大小写重写

我试图让我的nginxredirect尽可能干净。 我明白〜*是不区分大小写的,但是我只能在例子2中使用它。

例1

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; 

例子2 – 这个方法可行,但效率不如上面的线。

 if ( $request_filename ~* foobar ) { rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; } 

有没有办法做到不区分大小写的redirect与示例1没有得到它太泥泞?

谢谢。

我刚刚(并解决了)这个相同的问题,最终在这里试图find答案。 nginx文档( http://nginx.org/en/docs/http/ngx_http_rewrite_module.html )并没有清楚地说明〜*只能在if语句中使用,但显然情况就是如此。

为了在if语句之外获得ngnix URL重写的不区分大小写的正则expression式匹配,我不得不使用Apache / Perl风格:

 rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; 

请参阅http://perldoc.perl.org/perlretut.html (search不敏感)。 似乎在特定捕获组之外的前缀(?i)使其适用于整个searchstring。 注意:这似乎不适用于“^(?i)foobar”,因为它似乎暗含了“^”。

可以肯定的是,如果你最终做了一堆事情,为了使未来的重写变得更容易维护和减less歧义,你可能需要这样做:

 location /foobar { rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; } 

希望这可以帮助…

我发现,使这项工作:

 rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; 

你只需要这样做:

 rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; 

这只是意味着prepend(?i),否则一切都是相同的匹配。