5 votes

Page d'erreur 401 personnalisée ne demandant pas d'informations d'identification sur nginx

J'ai une partie de mon site web protégée par auth_basic :

    location / {
            auth_basic "Authorization Required";
            auth_basic_user_file .htpasswd;
            index  app.php;
            try_files $uri @rewriteapp;
    }

Pour les utilisateurs non autorisés (ceux qui cliquent sur 'Annuler'), je voudrais afficher une page d'erreur personnalisée. Voici comment je l'ai fait :

    error_page 401 = @error401;

    location @error401 {
                    rewrite ^ /error/401.html redirect;
    }

    location /error {
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public";
            index  app.php;
            try_files $uri @rewriteapp;
    }

J'ai dû créer l'alias @error401 afin de pouvoir spécifier "Redirect", car si j'utilisais la redirection interne, mon application traiterait la demande initiale (et donnerait accès à la page demandée réellement !)

Donc cela fonctionne bien, la page s'affiche. Le problème est que maintenant nginx ne demande même pas les informations d'identification aux utilisateurs.

Y a-t-il un moyen de corriger cela ? Ou toute autre meilleure façon de gérer ce problème?

5voto

Jason Barnett Points 183

Voici comment j'ai pu accomplir ce que vous essayez de faire :

## Le chemin doit être préfixé par un /, c'est-à-dire /401.html, PAS 401.html
error_page 401 /401.html;

location ~ (401.html)$ {
    alias /usr/share/nginx/html/$1;
}

3voto

li lj Points 21

Vous devriez ajouter auth_basic off;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X