La 1ère façon que je connais d'utiliser regex contre le paramètre $args est la suivante :
if ($args ~ "^(\w+)=") {
Ou la 2ème manière est d'utiliser le pratique $is_args comme ceci :
if ($is_args != "") {
N'oubliez pas que dans les deux styles vous devez mettre un espace entre le if et la parenthèse ouvrante; "if (" pas "if(" ainsi qu'un espace après la parenthèse fermante et l'accolade ouvrante; ") {" plutôt que "){".
Exemple complet utilisant le 1er style ci-dessus, 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;
}
}
Exemple complet utilisant le 2ème style ci-dessus, 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;
}
}
Notez que l'inclusion proxy.conf va en dehors de l'instruction if.
Version :
[nginx@hip1 ~]$ nginx -v
nginx version: nginx/1.2.6
Et quelques informations sur les variables $args et $is_args :
http://nginx.org/fr/docs/http/ngx_http_core_module.html
Lire la documentation est toujours utile, je viens de découvrir que $query_string est la même que $args, donc là où j'ai utilisé $args ci-dessus, vous pourriez aussi utiliser $query_string selon la documentation.
IMPORTANT
Il est toutefois important de noter que If can be Evil!
Et donc, testez minutieusement ou utilisez la recommandation fournie dans le lien ci-dessus pour changer l'URL à l'intérieur de l'instruction location d'une manière similaire à l'exemple fourni là, quelque chose comme :
location ~^/static/photos/.* {
error_page 418 = @dynamicphotos;
recursive_error_pages on;
if ($is_args != "") {
return 418;
}
# Votre défaut, si aucun paramètre de requête n'existe :
...
}
location @dynamicphotos {
# Si des paramètres de requête sont présents :
rewrite ^/static/photos/(.*)$ /DynamicPhotoQualitySwitch/photos/$1 break;
expires 7d;
include /etc/nginx/proxy.conf;
proxy_pass http://foofoofoo.com;
}