使用Nginx转换带参URL为美观链接并支持PHP读取参数
Nginx 货币换算页面美化路径完整配置
核心配置逻辑
整套配置需要两层不冲突的重写规则,严格遵循从上到下的匹配顺序,解决两个核心需求:
- 原带查询参数的老URL自动301跳转到美观层级路径
- 美观路径在后端内部映射回PHP可识别的标准GET参数格式,不改变浏览器地址栏显示
分步配置说明
1. 原老URL的外部跳转规则
你之前编写的跳转规则缺失了外部跳转标识,仅会在Nginx内部完成重写,无法让浏览器地址栏切换为美观路径,修正后的规则如下:
rewrite ^/conversion/index\.php$ /conversion/$arg_countryfrom/$arg_countryto/$arg_amount_type/$arg_recv_amount/$arg_amount? permanent;
规则末尾的
?作用是清空原请求携带的查询字符串,避免重写后出现参数重复拼接的问题;permanent标识代表返回301永久重定向,让浏览器记住新的美观路径地址。
2. 美观路径的内部参数映射规则
这是实现后端参数识别的核心逻辑,当用户访问约定的5段式层级路径时,Nginx在后台静默拆分路径段,对应赋值给原PHP脚本需要的5个GET参数,全程不触发外部跳转:
location ~ ^/conversion/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ { rewrite ^/conversion/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /conversion/index.php?countryfrom=$1&countryto=$2&amount_type=$3&recv_amount=$4&amount=$5 last; }
路径段的匹配顺序必须和约定的美观路径结构严格对齐:
来源国家/目标国家/源货币类型/目标货币类型/兑换金额,和示例美观链接的参数顺序完全一致。
常见踩坑规避
- 内部重写规则绝对不能加跳转标识:一旦在映射规则里加入301/302标识,用户访问美观路径时会被直接跳回带查询参数的老URL,彻底失去路径美化的意义。
- 规则顺序不能颠倒:必须把老URL跳转规则放在美观路径映射规则的前面,否则会出现逻辑循环,或老URL无法正常跳转到美观路径。
- 确保PHP解析规则正常接管重写请求:配置中最后使用的
last重写标识,会让Nginx重新按照顺序匹配后续的PHP解析规则,将重写后的index.php请求正常传递给PHP-FPM处理,不会出现PHP文件直接下载或404的问题。 - 无需额外处理路径转义:如果路径段中存在空格、特殊符号,Nginx会自动完成URL解码,拆分后的路径段参数可以直接被PHP正常读取。
内容的提问来源于stack exchange,提问作者Kane
相关产品推荐
相关产品推荐

