其实我以前都没有注意return和rewrite,因为都是用的一键脚本,脚本用的啥,我就用什么,还是这几天做ssl证书域名跳转,才去了解了一下。
在Nginx中,return和rewrite都用于重定向请求,但还是有区别,写法也不一样。
如果只是简单的重定向需求,推荐使用 return,而如果需要更复杂的 URI 重写逻辑,则可以使用 rewrite。
return规则基本写法:
return [HTTP响应码] [URL];
比如,执行永久重定向(301)的写法是:
return 301 http://example.com/new-url;
rewrite基本写法如下:
rewrite [正则表达式] [目标地址] [选项];
比如将所有请求重写到一个 PHP 文件的写法是:
rewrite ^(.*)$ /index.php?$query_string last;
这里 ^(.*) 是正则表达式,/index.php?query_string 是目标地址,last 是选项,表示这是最后一个 rewrite 指令。
return用于终止请求并发送响应,通常用于执行重定向;rewrite用于修改请求 URI,并将请求重定向到另一个地址,通常用于URL重写或内部转发。
所以如果做域名301转发,用return更合适,rewrite适合内部链接转发。