Nginx如果$ arg规则404请求,为什么?

时间:2014-10-08 10:37:47

标签: nginx

我在nginx服务器块中编写了以下规则:

location /s/sport(/)$ {
  if ($args ~ country){
    rewrite ^(.*) /s/sport/country/$arg_country? break;
  }
}

此处的目标是将http://example.com/rankings/soccer?country=de等旧版网址转换为http://example.com/rankings/soccer/country/de。这当然可以在应用程序本身中实现,但出于性能原因,我们需要在应用程序之前执行此操作;这些URL破坏了我们的缓存策略。

问题是当应用此规则时,以下URL格式开始为404:

/s/sport
/s/sport?country={iso_code}
/s/sport/country/{iso_code}

nginx报告请求failed (2: No such file or directory),这使我相信它现在正在寻找具有该名称的物理文件,而不是将路径传递给应用程序。

如何修复规则?

编辑:以下是我尝试添加的完整服务器配置:

server {
  listen         *:80;
  server_name   example.com;
  passenger_enabled on;
  access_log    /path/to/app/logs/access.log        main;
  error_log     /path/to/app/logs/error.log         error;
  root          /path/to/app/current/public;

  location ~* \.(ico|css|js|gif|jp?g|png|swf)(\?[0-9]+)?$ { 
    expires max;
    break;
  }

  if (-f $document_root/maintenance.html) {
    return 503;
  }

  error_page 503 @maintenance;
  location @maintenance {
    rewrite ^(.*)$ /maintenance.html break;
  }
}

0 个答案:

没有答案