0

我对 nginx 完全陌生,我想知道是否有人可以帮我一把。

我想要改变的是:

domain.com/ngu/short.php?t=123

进入

domain.com/t/123

如果有人可以向我解释它是如何完成的,我将非常感激。我在网站上查看了类似的情况,但我没有发现任何完全相同的东西,所以我遇到了一些困难。感谢您的时间 :)。

4

2 回答 2

0

万一这对其他人有帮助,这就是我(实际上是朋友)最终做的事情:

   location / {
        root /home/jim/www;
        index  index.html index.htm index.php;
        if (!-f $request_filename) {
          rewrite ^/t/(.+)$ /ngu/short.php?t=$1 last;
          rewrite ^/u/(.+)$ /ngu/short.php?u=$1 last;
          rewrite ^/s/ /ngu/short.php last;
          break;
        }
    }

我不明白,但它有效。

于 2012-08-19T18:53:58.530 回答
0

以下位置块进行重写:

location ~ /ngu/short.php {
  if ($args_t) {
    rewrite ^ http://$host/t/$v? last;
  }
}

但这需要您枚举所有可能的论点,如果您有很多潜在的论点,它可能更容易做到

location ~ /ngu/short.php {
  if ($args ~ "([a-z]+)=(\d+)") {
    set $p $1;
    set $v $2;
    rewrite ^ http://$host/$p/$v? last;
  }
}

解释:

  • 我们在 /ngu/short.php 路径上做一个匹配的位置
  • 上面的第一个代码块检查我们是否有 at=value 参数,如果有,则重写
  • 上面的第二个代码块检查更通用的参数=某事。然后我们需要将反向引用保存在变量中,因为重写规则会重置反向引用,从而阻止直接使用它们
  • 在任何一种情况下,如果 if 不匹配,将返回 404
  • $host 和 $args en $args_ 是标准 nginx 变量,请参见http://wiki.nginx.org/HttpCoreModule#Variables
  • 我们添加一个?广告重写结束以防止 nginx 读取 url 参数
于 2012-08-18T22:02:17.350 回答