【发布时间】:2020-06-18 21:46:39
【问题描述】:
我正在尝试使用 map 指令将一堆旧 URL 重定向到新 URL。我可以做一些简单的事情,但有点卡在带有查询参数的那些上。
我需要这样做
/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
}
【问题讨论】:
-
如何在
server块中使用这个map替换? -
@IvanShatsky 刚刚将该代码添加到问题中
-
第二部分不需要使用
map。试试看:rewrite ^/people/(.*)$ /people.php?personId=$1 last; -
@RichardSmith 我正在使用地图,因为有超过 50 个这样的网址。
-
好吧,你不能使用
$1(见下面我的回答),你需要将if块放在location /块内以避免重定向循环。