1 votes

Comment utiliser une variable personnalisée pour le schéma d'une règle de réécriture dans nginx ?

Existe-t-il un moyen de faire en sorte que nginx traite une variable personnalisée de la même manière qu'il traite le $scheme dans une règle de réécriture ? Par exemple :

rewrite ^/redirect http://example.com;
# and
rewrite ^/redirect_with_scheme $scheme://example.com;

entraîneront tous deux l'envoi d'une redirection 302 au client. Cependant, ceci :

set $real_scheme $scheme;
rewrite ^/redirect_with_real_scheme $real_scheme://example.com;

entraînera une réécriture côté serveur vers un fichier qui n'existe pas nécessairement, puis un message 404 au client. Pour ce que ça vaut, ceci :

set $real_scheme $scheme;
rewrite ^/redirect_with_real_scheme $real_scheme://example.com redirect;

donnera le résultat souhaité, à savoir l'envoi d'un 302 au client. Malheureusement, j'ai beaucoup de redirections configurées de cette façon et je préférerais ne pas les mettre à jour toutes avec la commande redirect si elle n'est pas nécessaire.

Si cela peut être utile, j'utilise Nginx 1.6.2.

1voto

Michael Hampton Points 232226

El documentation États :

Si une chaîne de remplacement commence par " http:// ", " https:// ", ou " $scheme ", le traitement s'arrête et la redirection est renvoyée à un client.

Si vous commencez l'URL par une autre variable, vous devrez exprimer l'intention de redirect explicitement.

-1voto

Bernard Rosset Points 1303

Je ne peux pas reproduire votre problème.

J'ai essayé la configuration minimale suivante, chaque rewrite fonctionne comme prévu (HTTP 302s) :

events {
    worker_connections  1024;
}

http {
    include mime.types;
    server {
        listen       80;

        set $real_scheme $scheme;
        rewrite ^/redirect http://localhost;
        rewrite ^/redirect_with_scheme $scheme://localhost;
        rewrite ^/redirect_with_real_scheme $real_scheme://localhost;
    }
}

Pourriez-vous me fournir une configuration minimale capable de démontrer le défaut rewrite des règles ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X