If statement Nginx';如果';不';我不能正常工作
我对nginx有一些问题。下面是我的简单virtualhost配置,它似乎无法正常工作:If statement Nginx';如果';不';我不能正常工作,if-statement,nginx,args,If Statement,Nginx,Args,我对nginx有一些问题。下面是我的简单virtualhost配置,它似乎无法正常工作: server { listen 80; server_name my.site; access_log /home/my.site/www/my.site/log/access.log; error_log /home/my.site/www/my.site/log/error.log error; root /home/my.site/www/my.sit
server {
listen 80;
server_name my.site;
access_log /home/my.site/www/my.site/log/access.log;
error_log /home/my.site/www/my.site/log/error.log error;
root /home/my.site/www/my.site/public/;
charset utf-8;
location /search/ {
error_page 418 = @passenger;
recursive_error_pages on;
if ( $arg_mode = block ) { return 418; }
default_type text/html;
try_files $request_uri @passenger;
}
location / {
try_files $uri @passenger;
}
location @passenger {
root /home/my.site/www/my.site/public/;
passenger_enabled on;
}
}
问题恰恰在于位置/搜索/。如果uri包含参数“mode”和值“block”(即uri看起来像http://my.site/search/word?mode=block&type=... (其他参数)
)
但现在它不起作用了。若静态文件/public/search/word存在,即使uri中存在参数mode=block,服务器也会发送它。。。我的错误是什么?您的配置在Nginx方面很好,对/search/with mode=block的任何请求都将发送到@passenger 一个简单的测试用例是
server {
listen 80;
server example.com;
location /search/ {
error_page 418 = @passenger;
recursive_error_pages on;
if ( $arg_mode = block ) { return 418; }
default_type text/html;
echo "/search/";
}
location @passenger {
echo "@passenger!";
}
}
使用curl调用此函数
# curl -i http://example.com/search/word/?mode=block&a=b$c=d
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 02 Oct 2014 11:35:50 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
@passenger!
因此,如果文件得到了送达,那么正如@Alexey Ten在他的评论中推断的那样,@passenger块中发生了这种情况。你确定不是passenger发送的文件吗?