我正在尝试使用map指令将一堆旧URL重定向到新的URls中。我能够执行简单的操作,但是有点卡在查询参数上。
我需要这样做
/people.php?personid=20 -> /people/20
/events.php/eventid=20 -> /event/20
/info.php?name=john&age=20 -> /person/john/20
我有一个地图指令
map $request_uri $redirected_uri {
~^people.php\?personid=(.*)^ /people/$1?;
}
但似乎不起作用。任何帮助,将不胜感激。提前致谢。
我的服务器块具有此代码
if ($redirected_uri) {
rewrite ^ $redirected_uri permanent;
}
另外,我正在尝试执行以下操作以及将/ people / 20改写回people.php?personId = 20所以,为此
map $request_uri $new_uri {
default 0
~^/people/(.*) /people.php?personId=$1;
}
然后在服务器块中
if ($new_uri) {
rewrite ^ $new_uri last; // this doesn't work, throws 404
}
一旦计算出另一个正则表达式,数字捕获就会超出范围,因此该rewrite
语句本身会抹除$1
前一条语句的值map
。
您可以return
改为使用以下语句:
if ($redirected_uri) {
return 301 $redirected_uri;
}
或更妙的是,在中使用命名捕获map
:
map $request_uri $redirected_uri {
~^/people\.php\?personid=(?<personid>.*)$ /people/$personid;
}
另请注意,Nginx URI以开头开始/
,您没有转义.
,并且正则表达式结尾的正确锚点是$
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句