2015-02-06 36 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