Подтвердить что ты не робот

Как сделать Basic Auth исключить переписанный URL-адрес

У меня есть базовая проверка подлинности на сервере разработки. Он настраивается внутри моего файла httpd.conf для VirtualHost веб-сайта. Я должен был настроить его, чтобы исключить определенные каталоги, что не вызвало никаких проблем, и все работает нормально.

Проблема заключалась в исключении URL-адреса, который прошел через мои правила mod_rewrite в файле .htaccess. Моя настройка заключается в том, что у меня есть все URL-адреса, проходящие через мой файл index.php, и оттуда найден и запущен соответствующий код. Я попытался добавить URL-адрес, который я хотел исключить (/businesses/upload_logo), как я сделал другие, но он все еще требует аутентификации. Это то, что я сейчас имею:

...
<Location />
    SetEnvIf Request_URI "/businesses/upload_logo" noauth=1
    SetEnvIf Request_URI "/api/.*" noauth=1

    AuthType Basic
    AuthName "Private"
    AuthUserFile ****
    Require valid-user

    Order deny,allow
    Satisfy any
    Deny from all
    Allow from env=noauth
</Location>
....

Я нашел вопросы, похожие на мои здесь и здесь, но ответы только дают мне то, что Я уже пытаюсь.

Я тоже думал о возможных других решениях, но это будет последнее средство. Я хочу посмотреть, возможно ли, как я это делаю сейчас:

  • Настройте базовый auth внутри моего php-кода вместо
    • Слишком много хлопот в данный момент
  • Поместите аутентификацию в мой .htaccess файл
    • Не хотел этого делать пока, поскольку я хочу, чтобы проверка подлинности происходила на одном из 3 серверов. Я знаю, что я мог бы использовать еще несколько SetEnvIf HOST ..., но я смотрю, можно ли это исправлять таким образом или не первым.

Правило mod_rewrite:

...

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L,QSA]
4b9b3361

Ответ 1

Попробуйте добавить

Allow from env=REDIRECT_noauth

Ответ 2

Для меня что-то вроде этого работает как шарм:

<location />
        SetEnvIf Request_URI "/businesses/upload_logo" REDIRECT_noauth=1
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/httpd/passwords/passwords
        Order Deny,Allow
        Satisfy any
        Deny from all
        Allow from env=REDIRECT_noauth
        Require user yournickname
</location>

Ответ 3

на основе того, что вы дали, он должен работать, если в вашей конфигурации не существует противоречивой директивы.

Я сделал аналогичную рабочую настройку, просто я использовал путь к файловой системе вместо URI

Я добавляю его здесь, надеясь, что вы можете найти его полезным

<VirtualHost *:8989 >
<IfModule mod_auth_basic.c>
 <Directory /var/www/html/vella-8989>
  # the auth block
  AuthType Basic
  AuthName "Please login."
  AuthUserFile /var/www/html/vella-8989/.htpasswd
  require valid-user

  Order Deny,Allow
  Satisfy any
  Deny from all
  Require valid-user
  Allow from env=noauth
</Directory>
</IfModule>
  # set an environtment variable "noauth" if the request has "/callbacks/"
  SetEnvIf Request_URI "/callbacks/" noauth=1
  ServerName vella.com
  ServerSignature off
</VirtualHost>