htaccess для исключения URL-адресов из основного авт


Мне нужно исключить один Url (или даже лучше один префикс)из обычной защиты htaccess Basic Auth. Что-то вроде / обратные вызовы / myBank или /вызовы/.* Есть ли у вас советы, как это сделать?

то, что я не ищу, - это как исключить файл. Это должен быть url (так как это решение основано на PHP framework, и все URL-адреса перенаправляются с помощью mod_rewrite для индексирования.РНР.) Так нет файла по этому адресу. Ничего.

некоторые из этих URL-адреса-это просто обратные вызовы от других служб (нет IP не известно, поэтому я не могу исключить на основе IP), и они не могут запрашивать пользователя / пароль.

текущее определение так же просто, как:

AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd
require valid-user 
8 62

8 ответов:

если вы используете Apache 2.4, SetEnvIf и mod_rewrite обходные пути больше не нужны, так как Require директива способна непосредственно интерпретировать выражения:

AuthType Basic
AuthName "Please login."
AuthUserFile "/xxx/.htpasswd"

Require expr %{REQUEST_URI} =~ m#^/callbacks/.*#
Require valid-user

Apache 2.4 лечит Require директивы,не сгруппировать по <RequireAll> как будто они были в <RequireAny>, который ведет себя как "или" заявление. Вот более сложный пример, который демонстрирует сопоставление URI запроса и строки запроса вместе, а затем возвращается требуется действительный пользователь:

AuthType Basic
AuthName "Please login."
AuthUserFile "/xxx/.htpasswd"

<RequireAny>
    <RequireAll>
        # I'm using the alternate matching form here so I don't have
        # to escape the /'s in the URL.
        Require expr %{REQUEST_URI} =~ m#^/callbacks/.*#

        # You can also match on the query string, which is more
        # convenient than SetEnvIf.
        #Require expr %{QUERY_STRING} = 'secret_var=42'
    </RequireAll>

    Require valid-user
</RequireAny>

этот пример позволит получить доступ к /callbacks/foo?secret_var=42 но требует имя пользователя и пароль для /callbacks/foo.

помните, что если вы используете <RequireAll> Apache будет пытаться соответствовать каждый Requireв целях так что подумайте о том, какие условия вы хотите разрешить в первую очередь.

ссылка для

используя SetEnvIf, вы можете создать переменную, когда запрос начинается с какого-то пути, а затем использовать

Это решение работает очень хорошо, вам просто нужно определить список, который вы хотите пройти.

SetEnvIfNoCase Request_URI "^/status\.php" noauth

AuthType Basic
AuthName "Identify yourself"
AuthUserFile /path/to/.htpasswd
Require valid-user

Order Deny,Allow
Deny from all
Allow from env=noauth

Satisfy any

Я пробовал другие решения, но это то, что работал для меня. Надеюсь, это поможет другим.

# Auth stuff
AuthName "Authorized personnel only."
AuthType Basic
AuthUserFile /path/to/your/htpasswd/file

SetEnvIf Request_URI "^/index.php/api/*" allow
Order allow,deny
Require valid-user
Allow from env=allow
Deny from env=!allow
Satisfy any

Это позволит к API URL-адрес и любую строку URL-адрес после /index.php/api/ чтобы открыть без необходимости входа в систему и что-нибудь еще будет предложено войти.

пример:

mywebsite.com/index.php/api откроется без запроса на логин mywebsite.com/index.php/api/soap/?wsdl=1 откроется без запроса на логин mywebsite.com будет предложено войти в систему первый

другой подход работает так, если область, которую вы защищаете, имеет монолитный PHP-скрипт, контролирующий все, например Wordpress. Настройка проверки подлинности с помощью в другом каталоге. Поставьте указатель.php там, что устанавливает Куки по пути '/'. Затем в Wordpress (например) проверьте cookie, но обойдите проверку, если $_SERVER['REQUEST_URI'] является исключенным URL.

на моей общей хостинговой платформе RewriteRule не удалось установить переменную среды, которая работала с " Satisfy любой."

при любом подходе следите за тем, чтобы защищаемая страница не включала изображения, таблицы стилей и т. д., который запускает запрос Аутентификации, когда сама страница этого не делает.

<location />
        SetEnvIf Request_URI "/callback/.*" 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>

добавьте ниже код в корневой файл htaccess и не забудьте изменить url-адрес администратора, .страницы файл htpasswd.

<Files "admin.php">
        AuthName "Cron auth"
        AuthUserFile E:\wamp\www\mg\.htpasswd
        AuthType basic
        Require valid-user
    </Files>

создать .htpasswd файл в корневой папке и добавить ниже имя пользователя и пароль (установить имя Пользователя по умолчанию: admin и пароль: admin123)

admin:$apr1.nTvE4f$UirPOK.PQqqfghwANLY47.

пожалуйста, дайте мне знать, если вы все еще сталкиваются с любой вопрос.

почему бы вам просто не использовать basic auth так, как это было задумано?

user:password@domain.com/callbacks/etc