Nginx重写语法

时间:2012-03-13 19:19:16

标签: nginx rewrite

我见过一堆nginx重写,其语法如下:

server {
    server_name  www.example.com;
    rewrite ^(.*) http://example.com$1 permanent;
}

我不理解^(.*)部分。 ^是否采用了uri的顶级域名之后的所有内容?

2 个答案:

答案 0 :(得分:3)

^确实在字符串的开头匹配。在nginx的rewrite指令的情况下,这意味着实际URI的路径组件的开头。不幸的是,nginx的文档略有不正确。引自http://www.nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

  

如果指定的正则表达式与URI匹配,则URI将根据替换字符串中的指定进行更改。

然而,这在技术上是错误的。 rewrite与整个URI /网址不匹配,但仅与其路径组件(始终以/开头,即使用户仅输入http://www.example.com而不是http://www.example.com/)。因此rewrite ^(.*) http://example.com$1 permanent;不会变成http://example.comwww.example.com

答案 1 :(得分:1)

如果我没记错,^只会设置正则表达式规则以匹配字符串的开头。 括号用于使用$ 1-9变量提取该部分。

Nginx维基的另一个解决方案。 Link

server {
   server_name www.example.com;
   rewrite ^ http://example.com$request_uri? permanent;
}