regex - nginx 使用地图重定向多个 URL
问题描述
我正在尝试使用 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
}
解决方案
解决此问题的常用方法如下所示:
map $request_uri $redirect {
default 0;
~^/people.php\?personid=(\d+)^ /people/$1;
...
}
server {
...
if ($redirect) {
set $args '';
return 301 $redirect;
}
我已将捕获组限制personid=
为数字:\d+
推荐阅读
- xslt - 我可以在 XSL-FO 块的 src 属性中包含一个变量吗?
- r - 无法在 DT 中合并,因为我强制双 RHS 合乎逻辑
- swift - 通过拖动手势更改偏移时的摇晃视图
- json - 结构化流如何动态解析kafka的json数据
- shell - 回显一个带有变量的字符串,该变量也是一个字符串和变量,并且为空白但不起作用
- java - 递减数字金字塔,嵌套for循环,用户输入,java
- java - 在请求正文中验证日期
- sas - 使用 proc 报告在 RTF 输出中水平合并单元格
- c - 我不知道如何在读取数组元素时迭代它们
- typescript - 在 chrome 上找不到 myfille .module ERROR