nginx - 将url获取参数转换为nginx中的url段
问题描述
我有这个网址https://example.com/user?param1=value1¶m2=value2¶m3=value3
并让它转到 Nginx 服务器上的https://example.com/user/value1/value2/value3 。
仅供参考,它是 WordPress 网站,我在 Nginx 配置文件中添加了以下规则。
location ~ /user/ {
if ($args ~* "^param1=(\d+)¶m3=(\d+)¶m3=(\d+)") {
set $param1 $1;
set $param2 $1;
set $param3 $1;
set $args '';
rewrite ^.*$ /user/$param1/$param2/$param3 permanent;
}
}
解决方案
您的解决方案有两个错误,1)location
不匹配/user
,2)rewrite
还附加了原始参数。
这可以通过使用完全匹配location
和?
. rewrite
例如:
location = /user {
...
rewrite ^ /user/$param1/$param2/$param3? permanent;
}
但是,该map
语句是一种更清洁且可扩展的解决方案,例如:
map $request_uri $redirect {
default 0;
~*^/user?param1=(?<p1>\d+)¶m2=(?<p2>\d+)¶m3=(?<p3>\d+)$ /user/$p1/$p2/$p3;
}
server {
...
if ($redirect) { return 301 $redirect; }
...
}
有关详细信息,请参阅此文档。
推荐阅读
- scala - 如何在 Gatling 的 foreach 循环中调用资源请求?
- angular - 在创建角度元素时,会生成多个块文件。如何将所有这些合并为一个
- ios - 在后台模式下使用 CoreML 对用户活动进行分类
- javascript - 如何使用 clearRect() 而不删除我拥有的其他对象?
- kotlin - Kotlin 项目创建期间缺少模板
- node.js - 带有 React 前端的 NodeJS/Express API 实时通知
- java - 有条件地记录信息的最有效方法是什么?
- assembly - 在 x86_x64 架构上组装 x86 汇编源代码
- excel - 有一个更好的方法吗?VBA 脚本
- c# - Visual Studio 如何在 Regex 构造函数中语法高亮字符串?