我试图让我的 nginx 重定向尽可能干净。我知道 ~* 不区分大小写,但我只能让它在示例 2 中工作。
示例 1
rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
Run Code Online (Sandbox Code Playgroud)
示例 2 - 这有效,但不如上面的行有效。
if ( $request_filename ~* foobar ) {
rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用示例 1 进行不区分大小写的重定向而不会让它变得太混乱?
谢谢。
小智 37
我发现可以使这项工作:
rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
Run Code Online (Sandbox Code Playgroud)
你只需要这样做:
rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
Run Code Online (Sandbox Code Playgroud)
这只是意味着前置 (?i) 否则匹配的一切都是相同的。
小智 13
我刚遇到(并解决了)同样的问题,最后来到这里试图找到答案。nginx 文档(http://nginx.org/en/docs/http/ngx_http_rewrite_module.html)没有明确说明 ~* 仅在 if 语句中有效,但显然情况就是如此。
要在 if 语句之外为 ngnix URL 重写获得不区分大小写的正则表达式匹配,我必须使用 Apache/Perl 样式:
rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
Run Code Online (Sandbox Code Playgroud)
请参阅http://perldoc.perl.org/perlretut.html(搜索 insensitive)。似乎在特定捕获组之外添加前缀 (?i) 使其适用于整个搜索字符串。注意:这似乎不适用于“^(?i)foobar”,因为似乎隐含了“^”。
不过,可以肯定的是,如果你最终做了一堆重写,为了使任何未来的重写更容易维护和更少歧义,你可能想要做这样的事情:
location /foobar {
rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
| 归档时间: |
|
| 查看次数: |
20809 次 |
| 最近记录: |