,我知道的是使用正則表達式在$ args參數,像這樣的1路:
if ($args ~ "^(\w+)=") {
或第二的方法是使用便捷$ is_args像這樣:
if ($is_args != "") {
請記住,在兩個風格你需要在if和左括號之間放一個空格; 「if(」not「if(」以及右括號和左括號之後的空格;「){」而不是「){」。
使用1號風格上面,nginx.conf完整的示例:
location ~^/static/photos/.* {
include /etc/nginx/proxy.conf;
if ($args ~ "^(\w+)=") {
rewrite ^/static/photos/(.*)$ /DynamicPhotoQualitySwitch/photos/$1 break;
expires 7d;
proxy_pass http://foofoofoo.com;
}
}
完整的示例使用上面的第二個款式,nginx.conf:
location ~^/static/photos/.* {
include /etc/nginx/proxy.conf;
if ($is_args != "") {
rewrite ^/static/photos/(.*)$ /DynamicPhotoQualitySwitch/photos/$1 break;
expires 7d;
proxy_pass http://foofoofoo.com;
}
}
注意,proxy.conf包括超出if語句。
版本:
[[email protected] ~]$ nginx -v
nginx version: nginx/1.2.6
而關於的$ args一些信息和$ is_args變量:
http://nginx.org/en/docs/http/ngx_http_core_module.html
讀取文檔總是有用的,我才發現,原來$ QUERY_STRING是相同的作爲$ args,所以在上面我有$ args的地方,你也可以根據文檔使用$ query_string。
重要
然而,值得注意的是,這If can be Evil!
也因此無論是測試徹底或使用中的鏈接提供的建議,上述改變位置語句中的URL的方式類似於此處提供的示例,如下所示:
location ~^/static/photos/.* {
error_page 418 = @dynamicphotos;
recursive_error_pages on;
if ($is_args != "") {
return 418;
}
# Your default, if no query parameters exist:
...
}
location @dynamicphotos {
# If query parameters are present:
rewrite ^/static/photos/(.*)$ /DynamicPhotoQualitySwitch/photos/$1 break;
expires 7d;
include /etc/nginx/proxy.conf;
proxy_pass http://foofoofoo.com;
}
您是指GET參數嗎?例如/static/photos/photo1.png?size=small – GCon
是的,請舉例說明。 – Nicholas
Christophe,由於您沒有接受答案,我認爲該解決方案對您無效。 Nginx非常棒,所以我很樂意幫助解決您可能遇到的任何問題,只要告訴我您是否遇到任何問題。 – hoonto