2015-02-06 62 views
0

Im试图让我的管理控制器在auth_basic认证下。这是我的nginx的配置看起来像:

location /index.php { 
    if ($arg_r ~ admin) { 
     auth_basic       "Restricted"; 
     auth_basic_user_file    /etc/nginx/mywebsite/.htpasswd; 
    } 
} 

location ~ \.php$ { 
    include fastcgi_params; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_script_name; 
    fastcgi_pass php; 
} 

我需要的时候请求包含在ARG r“管理”,例如以提示在AUTH:

  • /index.php?r=管理 - >验证
  • /index.php?r=admin/anythinghere - >验证
  • /index.php?r=site/index - >无验证

但不工作,我做错了什么?

回答

0

根据文档,auth_ *在“if”中是不允许的。也许这可以做到这一点:

location = /index.php { 
    if ($arg_r ~ admin) { 
     rewrite^/_admin/index.php$is_args$args last; 
    } 
    include fastcgi_params; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_script_name; 
    fastcgi_pass php; 
} 

location /_admin/index.php { 
    internal; 
    auth_basic       "Restricted"; 
    auth_basic_user_file    /etc/nginx/mywebsite/.htpasswd; 
    include fastcgi_params; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_script_name; 
    fastcgi_pass php; 
} 
location ~ \.php$ { 
    include fastcgi_params; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_script_name; 
    fastcgi_pass php; 
} 

只需重复启用身份验证的位置。 “内部”指令限制直接请求到这个位置。 注意我在第一个位置添加了“=”,它允许避免将/index.phpadasdasdsdfadsf改写成/_auth/index.php

+0

嗯,如果我改正了我的配置,就像你说的,去/index.php下载我的index.php名称为“下载”,但在index.php?r = admin请求我授权。什么f ** k? – marioshki 2015-02-06 14:38:30

+0

代替他的评论,你需要包括你用于处理php的任何机制(例如fastcgi或代理),没有它“.php”文件只是文件。 – 2015-02-06 15:09:44

+0

我的位置〜\ .php在配置结尾 – marioshki 2015-02-06 15:13:27