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

мне нужно подсказать авторизацию, когда запрос содержит «администратор» в арг r, например:

  • /index.php?r= админ -> Auth
  • /index.php?r=admin/anythinghere -> Auth
  • /index.php?r=site/index -> Нет Auth

Но не работает, что я делаю неправильно?

ответ

0

Согласно документации, auth_ * не разрешены в «if» s. Возможно, это могло бы сделать трюк:

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

Mmmmm, если я исправлю свою конфигурацию, как вы сказали, перейдите в /index.php загружает меня index.php с именем «Загрузить», но в index.php? r = admin прошу меня auth. Что такое f ** k? – marioshki

+0

Вместо своих комментариев вам нужно включить любой механизм, который вы используете для обработки php (например, fastcgi или прокси), без этого файлы .php - это просто файлы. –

+0

У меня есть место ~ \ .php в конце конфига – marioshki