我见过一堆ngnix重写,其语法如下:
server { server_name www.example.com; rewrite ^(.*) http://example.com$1 permanent; }
我不明白^(.*)
部分。 是否把所有的东西都放在ULD的TLD之后?
^
的确在字符串的开头匹配。 在nginx的rewrite
指令的情况下,这意味着实际URI的路径组件的开始。 不幸的是nginx的文档稍微不正确。 从http://www.nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite引用:
如果指定的正则表达式与URI匹配,则URI将按照替换字符串中的指定进行更改。
但是,这在技术上是错误的。 rewrite
不匹配整个URI / URL,但只有它的路径组件(它始终以/
开头,即使用户只输入例如http://www.example.com
而不是http://www.example.com/
) 。 因此rewrite ^(.*) http://example.com$1 permanent;
不会变成http://example.comwww.example.com
。
如果我记得正确, ^
只是设置正则表达式规则来匹配字符串的开始。 括号用于提取$ 1-9变量的部分。
另一个来自Nginx wiki的解决方案。 链接
server { server_name www.example.com; rewrite ^ http://example.com$request_uri? permanent; }