Hello!
2012/5/28 Lyons li <lbblyons@gmail.com>:
> 非常冒昧对您的打扰。只是看了您的新浪博客上有关nginx的教程,有一些疑惑的地方,所以恳请解答。
多谢反馈 :)
> 我想问的是
> if ($host ~* www\.(.*)) {
> set $host_without_www $1;
> rewrite ^(.*)$ http://$host_without_www$1 permanent;
> }
> 这样一段nginx的配置中,$1这变量是什么,类似的我还看到有$2这样的变量。
$1 和 $2 这样的变量对应之前的最后一次正则匹配的"分组"结果。
正则表达式中的一对括号就建立了一个分组,例如 ^(\w+:)\s+(\S+)$ 中,就有两个分组,第一个分组是
(\w+:),而第二个分组则是 (\S+),于是 $1 的值就对应子模式 \w+: 所匹配的结果子串,而 $2 的值就对应子模式 \S+
所对应的结果子串。比方说,字符串 name: Jerry 在匹配了 ^(\w+:)\s+(\S+)$ 之后,$1 便是 name,而 $2
便是 Jerry.
这非常类似 Perl 语言中的 $1 和 $2 变量的用法。
> 而rewrite语句的$1后面的permanent是什么意思?我同时注意到很多时候还会有类似的单词出现在配置语句的结尾,比如last。
>
这里的 permanent 修饰符表示返回 301 Moved Permanently 这个 HTTP 错误页(类似地,redirect
修饰符则表示返回 302 错误页)。而 last 修饰符则表示停止执行当前 rewrite 指令之后的其他 ngx_rewrite
模块的指令。
更多细节可以参见 rewrite 配置指令的官方文档:
http://wiki.nginx.org/HttpRewriteModule#rewrite
> 非常抱歉打扰您。
客气。建议你加入我们的 openresty 邮件列表,并在那里提问或者和我们交流 nginx 或者 openresty 相关的问题(国内访问可能需要翻墙):
https://groups.google.com/group/openresty
我已经把这封邮件抄送给了 openresty 邮件组。
Regards,
-agentzh