今天公司有个需求:
访问这个:xxx.com/m/courseDetail?courseId=227&courseType=4
跳转到这个:xxx.com/m/courseDetail/227?courseType=4
自己尝试了很久都没有实现,请教了别人才懂,特记录一下:
if ($uri ~ ^/m/courseDetail$) {
rewrite ^/ $uri/$arg_courseId?courseType=$arg_courseType? redirect;
}
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。该值有可能和$request_uri 不一致。$request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。
$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
另一种实现方式:
if ( $request_uri ~* “/m/courseDetail\?courseId=([0-9]+)&(.*)”) {
set $mycouid $1;
set $myque $2;
rewrite .* /m/courseDetail/$mycouid?$myque? permanent;
}
总结:
rewrite ^/test.php /new permanent; //重写向带参数的地址
rewrite ^/test.php /new? permanent; //重定向后不带参数
rewrite ^/test.php /new?id=$arg_id? permanent; //重定向后带指定的参数