我试图让我的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),否则一切都是相同的匹配。