基本的nginx URL重写问题

时间:2012-08-18 21:15:17

标签: nginx

我对nginx完全不熟悉,我想知道是否有人可以帮助我。

我正试图改变这一点:

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

domain.com/t/123

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

2 个答案:

答案 0 :(得分: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路径上找到匹配的位置
  • 上面的第一个代码块检查我们是否有t = value参数,如果是,则重写
  • 上面的第二个代码块检查更一般的参数=某事。然后,我们需要在变量中保存反向引用,因为重写规则会重置后向引用,从而阻止直接使用它们
  • 在任何一种情况下,如果if无法匹配404将被返回
  • $ host和$ args en $ args_是标准的nginx变量,请参阅http://wiki.nginx.org/HttpCoreModule#Variables
  • 我们添加一个? ad重写结束,以防止nginx读取url参数

答案 1 :(得分: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;
        }
    }

我不明白,但它确实有效。