基本nginx URL重写问题

基本nginx URL重写问题,nginx,Nginx,我对nginx完全陌生,我想知道是否有人能帮我一把 我要做的是扭转这种局面: domain.com/ngu/short.php?t=123 进入 domain.com/t/123 如果有人能向我解释这是怎么做的,我将非常感激。我在网站上到处寻找类似的情况,但我没有发现完全相同的东西,所以我遇到了一些困难。感谢您的时间:)。以下位置块执行重写: location ~ /ngu/short.php { if ($args_t) { rewrite ^ http://$host/t/$v?

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

我要做的是扭转这种局面:

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

进入

domain.com/t/123


如果有人能向我解释这是怎么做的,我将非常感激。我在网站上到处寻找类似的情况,但我没有发现完全相同的东西,所以我遇到了一些困难。感谢您的时间:)。

以下位置块执行重写:

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参数,如果有,则进行重写
  • 上面的第二个代码块检查更一般的参数=something。然后我们需要将反向引用保存在变量中,因为重写规则会重置反向引用,从而阻止直接使用它们
  • 在任何一种情况下,如果if未能匹配,将返回404
  • $host和$args en$args_uu是标准的nginx变量,请参阅
  • 我们加一个?在重写结束时添加ad以防止nginx读取url参数

如果这对其他人有帮助,我(实际上是一个朋友)最终会这么做:

   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;
        }
    }

我不理解它,但它可以工作。

当我试图将顶层代码放入配置文件并重新启动nginx时,我遇到了以下错误nginx:[emerg]“location”指令不允许在/etc/nginx/nginx.conf:347中使用其他代码,当我转到/t/123时,它只是404s。您必须将位置块放入服务器块中,听起来像是把它放进了http块中。注意:您的服务器块可能被拆分为/etc/nginx/sites enabled/或/etc/nginx/conf.d中的一个文件(取决于您使用的发行版)