我是 nginx 新手。问题是如何将带有查询字符串的 URL 重写为“干净”的 URL:
对于一个参数:
host.com?page.html/param1=value1 <- host.com/page/value1
www.host.com?param1=value1 <- www.host.com/page/value1
对于两个参数:
host.com?page.html/param1=value1¶m2=value2 <- host.com/page/value1/value2
www.host.com?param1=value1¶m2=value2 <- www.host.com/page/value1/value2
对于 n 个参数:
host.com?page.html/param1=value1¶m2=value2..¶mN=valueN <- host.com/page/value1/value2/../valueN
www.host.com?param1=value1¶m2=value2..¶mN=valueN <- www.host.com/page/value1/value2/../valueN
答案1
参数(又称参数或查询字符串)不会直接被视为 nginx 重写的 URL 的一部分。相反,它们被保存为变量,可以访问、测试并插入到生成的 URL 中。
它们保存的名称是 $arg_。因此,在第一个示例中,您需要像这样重定向它们:
rewrite ^/page.html$ /page/$arg_param1? permanent;
我不建议在没有进行输入验证的情况下直接从您的主机名(www.host.com?param1=value1)对参数执行重写,否则您最终会从您的主页重定向所有内容。