我见过一堆nginx重写,其语法如下:
server {
server_name www.example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
我不理解^(.*)
部分。 ^
是否采用了uri的顶级域名之后的所有内容?
答案 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;
}