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