【问题标题】:auth_basic off for a single controller in cakephp served by nginx (location and rewrite)为 nginx 服务的 cakephp 中的单个控制器关闭 auth_basic(定位和重写)
【发布时间】:2011-05-14 11:17:39
【问题描述】:

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

根据我对here 的理解,应该。

我试图将上述技巧与 if ($request_uri ~* /phpmyadmin) 结合起来,但 auth_basic 在 IF 中是不允许的,我猜(重启 nginx: [emerg]: "auth_basic" 指令是这里不允许)。

我也尝试匹配重写的位置,即 location /index.php?q=/my_controller/my_action { 但没有成功。

我猜,由于重写,精确运算符“=”也不能正常工作。 “~”也一样。

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

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

【问题讨论】:

    标签: php regex cakephp nginx


    【解决方案1】:

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

    这种情况的最佳解决方案是简单地将auth_basic 放在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
        }
    }
    

    【讨论】:

    • 很遗憾,它不起作用,仍然需要密码才能访问 /my_controller/my_action
    • 很奇怪,但编辑后的版本确实有效 :-) 毕竟 .php 是 / 的子集,所以之前已经匹配了 auth_basic...再次感谢 shellholic!
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多