2013-01-24 37 views
3

我有auth_basic保护我的网站的一部分:自定义401页不提示输入凭据nginx的

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

对于未经授权的用户(那些谁点击“取消”),我想显示自定义错误页面。以下是我已经做到了:

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

我不得不创建@ error401别名,所以我可以指定“重定向”,因为如果我使用内部重定向,我的应用程序将处理的原始请求(和给访问到实际请求的页面!)

所以这工作正常,页面显示。 问题是,现在nginx甚至不会要求用户提供凭据。

有什么办法解决这个问题吗?或者有更好的方法来处理这个问题?

回答

3

这是我能够完成你想要做什么:

## Path must be prefixed with a /, i.e. /401.html, NOT 401.html 
error_page 401 /401.html; 

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

谢谢,你的回答需要一些定制,因为它需要服务的PHP文件和不是一个静态的,但我会尝试如果我能适应它。 – Julien

+0

@Julien您是否找到了重定向问题的解决方案?错误子句/重定向只是简单地忽略认证并且首先重写 – vongolashu

0

您应该添加auth_basic off;

相关问题