regex - 尽管重定向有效,但 Nginx 位置中的匹配返回空 $1
问题描述
我是 Nginx 的新手,我需要永久重定向这样的 URL:
https://www.mywebsite.ext/mars/2015/mypage.php?foo=1&bar=0
给另一个这样的人:
https://www.mywebsite.ext/earth?year=2015&foo=1&bar=0
我尝试使用的位置指令(在 server{ ... } 内)如下:
location ~ ^/mars/([0-9]+)/mypage.php {
return 301 $scheme://$server_name/earth?year=$1&$args;
}
一切正常,但 $1 为空,即在上面的示例中,重定向实际生成的 URL 是:
https://www.mywebsite.ext/earth?year=&foo=1&bar=0
(“年份”的值应该是“2015”)
我做错了什么?我怎样才能实现目标?
解决方案
如上所述,您可以改用命名捕获组:(?<year>[0-9]+)
然后$year
在重定向中使用 var。
location ~ ^/mars/(?<year>[0-9]+)/mypage.php {
return 301 $scheme://$server_name/earth?year=$year&$args;
}
推荐阅读
- c# - Visual C#,两个日期之间的日期数组
- android - 无法通过广播从服务到片段获取数据
- laravel - Laravel 配置
- c++ - 在 G++ 中编译时出现 C++ 多定义错误
- python - 通过偏序集的方式数
- python - 我无法在 MacOS Sierra 上安装 PIP
- java - ElasticSearch search by _source fields
- android - 如何确保在应用程序崩溃时存储日志并允许在颤动中发送给开发人员?
- javascript - 带有事件处理程序的 for 循环
- c# - 将 Label 和 PickerView 放在 TableView 的同一行