代码之家  ›  专栏  ›  技术社区  ›  Piotr Byzia

为nginx提供的cakephp中的单个控制器关闭auth_basic(定位和重写)

  •  0
  • Piotr Byzia  · 技术社区  · 15 年前

    我想不受限制地访问我在CakePHP中的一个控制器。 下面是我正在使用的配置,不幸的是,当尝试myhost.com/my_controller/my_操作时,它仍然需要凭据。不应该/我的控制器/我的动作匹配吗 位置^~/my_controller/my_action 而不是 位置~.php$ ?

    据我所知 here 应该的。

    我试着把上面的技巧和 if($request_uri~*/phpmyadmin) ,但是在IFs中不允许auth_basic,我猜(重新启动nginx:[emerg]:这里不允许“auth_basic”指令)。

    我还尝试匹配重写的位置,即。 位置/index.php?q=/my_控制器/my_操作{ 但没有成功。

    确切的运算符“=”也不起作用,因为重写,我猜。与“~”相同。

    理想情况下,解决方案应该足够通用,以便与其他控制器一起使用。

    server {
        root
        index
    
        rewrite ^(.+)$ /index.php?q=$1 last;
    
        location ^~ /my_controller/my_action {
            auth_basic off;
            fastcgi_pass
            fastcgi_index
            fastcgi_param
            include
        }
    
        location ~ \.php$ {
            auth_basic "Restricted";
            auth_basic_user_file
    
            fastcgi_pass
            fastcgi_index
            fastcgi_param
            include
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   shellholic    15 年前

    通过放置 auth_basic 在*.php位置,您可以说您限制了对php生成的文件的访问。如果您在控制器中访问一些php生成的文件,它将获胜。

    对于这种情况,最好的解决方案是简单地将 基本身份验证 location .

    编辑1:不工作

    server {
        root
        index
    
        auth_basic "Restricted";
        auth_basic_user_file
    
        rewrite ^(.+)$ /index.php?q=$1 last;
    
        location ^~ /my_controller/my_action {
            auth_basic off;
            fastcgi_pass
            fastcgi_index
            fastcgi_param
            include
        }
    
        location ~ \.php$ {
            fastcgi_pass
            fastcgi_index
            fastcgi_param
            include
        }
    }
    

    编辑1:完全重写

    server {
        root
        index
    
        auth_basic_user_file
    
        rewrite ^(.+)$ /index.php?q=$1 last;
    
        location / {
            auth_basic "Restricted";
        }
    
        location ^~ /my_controller/my_action {
            auth_basic off;
            fastcgi_pass
            fastcgi_index
            fastcgi_param
            include
        }
    
        location ~ \.php$ {
            fastcgi_pass
            fastcgi_index
            fastcgi_param
            include
        }
    }