【问题标题】:nginx rewrite multiple argumentsnginx重写多个参数
【发布时间】:2017-08-07 19:41:37
【问题描述】:

我正在尝试重写

  1. web.com/abweb.com?sys=ab
  2. web.com/ab/cdweb.com?sys=ab&id=cd
  3. web.com 没有改变。

我写了以下内容:

rewrite ^/(\w+)(/?\w*)$ /?system=$1&id=$2 break;

【问题讨论】:

  • 我不能让这个失败。您是否在测试之间清除浏览器的缓存?过时的缓存会导致不可预知的结果。
  • @RichardSmith 是的,当然。我测试了写?system=test&id=5 它有效,但/test/5 没有
  • @RichardSmith 当我访问/test/5 时,它会尝试在/test/ 中找到我的js/css 文件! Unable to find web.com/test/user.css。重写不正确..
  • 这是一个不同的问题。如果您对资源文件使用路径相对 URI并且使用“看起来像”子目录的路由,浏览器将通过为明显的子目录添加前缀来请求资源文件。这种方案需要使用绝对路径资源文件。
  • @RichardSmith 但是如果 URL 被重写,浏览器应该看到?system=2&id=5,而不是子目录...

标签: regex nginx url-rewriting


【解决方案1】:

测试你的重写语句,我得到:

  1. web.com/abweb.com?sys=ab&id=
  2. web.com/ab/cdweb.com?sys=ab&id=/cd
  3. web.com 没有改变。

您可以通过移动括号来修复 (2),这样第二个 / 就不会被捕获。解决 (1) 的最简单方法是将您的一个 rewrite 语句替换为两个:

rewrite ^/(\w+)/(\w*)$ /?system=$1&id=$2 break;
rewrite ^/(\w+)$       /?system=$1       break;

【讨论】:

  • 它适用于 1 个参数,但不适用于 2.
  • 它对我有用。也许您的配置中还有其他问题导致您出现问题。
  • 更新问题,添加实际数据
  • 顺便说一句,你如何测试语句?
  • 我将配置粘贴到我正在运行的测试服务器nginx/1.10.1
猜你喜欢
  • 2016-09-29
  • 2015-08-26
  • 2017-01-18
  • 2012-10-12
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多