【问题标题】:nginx rewrite URLnginx 重写 URL
【发布时间】:2012-11-27 14:45:05
【问题描述】:

我想重写以下网址:

index.php?SOMETHING=VALUE

作为

/SOMETHING/VALUE

我对 nginx 重写缺乏经验,因此不胜感激。

谢谢

【问题讨论】:

  • SOMETHING 是固定值吗?如果没有,你想如何处理index.php?SOMETHING=VALUE&anotherField=foo等意外请求?
  • 某物是变量,值也是变量。 URL 中没有其他变量
  • 好的,谢谢您的回复。您说在 URL 中不应该有任何其他变量,但是您是否对将向您发送请求的 HTTP 客户端拥有完全权限?我的意思是,如果请求来自任何 WWW 用户,那么您很可能会收到一些填充了第三方变量的请求。无论如何,我会尝试只为一个变量找到答案。
  • 我明白这一点。能做到吗?
  • 如果您在 serverfault.com 上发布此问题,您可能会得到更多答案

标签: url-rewriting nginx


【解决方案1】:

我已经想出了解决您问题的方法:

location /index.php {
    if ( $args ~ "(?<PATH1>.*)=(?<PATH2>.*)" ) {
        rewrite ^ /${PATH1}/${PATH2}? last;
    }
}

解释:

  • if ( $args ~ "(?&lt;PATH1&gt;.*)=(?&lt;PATH2&gt;.*)" ) :从 URL 参数中捕获两个相关部分,将值存储在变量 PATH1PATH2
  • rewrite ^ 表示“重写整个 URI”
  • /${PATH1}/${PATH2} 正在构建新的 URI
  • 结尾的 ? 通知 nginx 您不想附加原始 URL 参数
  • last 告诉 nginx 在重写后继续遵守规则

【讨论】:

  • 您能否告诉我们您用作请求的确切 URI 是什么,以及您打算将其重写为的确切 URI。另外,最终位置是静态文件还是基于 PHP 的位置?
猜你喜欢
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2014-05-18
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多