Nginx proxy pass et url rewriting

Comment déclencher cette règle uniquement lorsque j’ai des parameters GET (chaîne de requête) dans l’URL, sinon je vais faire correspondre un alias.

location ~^/static/photos/.* { rewrite ^/static/photos/(.*)$ /DynamicPhotoQualitySwitch/photos/$1 break; expires 7d; proxy_pass http://foofoofoo.com; include /etc/nginx/proxy.conf; } 

La première façon que je connaisse consiste à utiliser une expression régulière contre le paramètre $ args comme ceci:

  if ($args ~ "^(\w+)=") { 

Ou la deuxième façon est d’utiliser le $ is_args commode comme ceci:

  if ($is_args != "") { 

Rappelez-vous que dans les deux styles, vous devez placer un espace entre la parenthèse if et la parenthèse d’ouverture; “if (” not “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 le proxy.conf include 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/en/docs/http/ngx_http_core_module.html

La lecture des documents est toujours utile, je viens de découvrir que $ query_ssortingng est le même que $ args, donc lorsque j’ai $ args ci-dessus, vous pouvez aussi utiliser $ query_ssortingng selon les docs.

IMPORTANT

Il est important de noter cependant que si peut être le mal!

Et donc soit tester minutieusement ou utiliser la recommandation fournie dans le lien ci-dessus pour changer l’URL dans la déclaration de localisation d’une manière similaire à l’exemple fourni, quelque chose comme:

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