htaccess исключает один url из базовой аутентификации
Мне нужно исключить один Url (или даже лучше один префикс) из обычной защиты htaccess Basic Auth. Что-то вроде / обратные вызовы / myBank или /вызовы/.* У вас есть какие-нибудь подсказки, как это сделать?
то, что я не ищу, - это как исключить файл. Это должен быть url (так как это решение основано на PHP framework, и все url перенаправляются с помощью mod_rewrite в index.РНР.) Таким образом, нет файла под этим url. Ничего.
некоторые из этих URL-адреса-это просто обратные вызовы от других служб (IP-адрес не известен, поэтому я не могу исключить на основе IP), и они не могут запрашивать пользователя / пароль.
текущее определение так же просто, как:
AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd
require valid-user
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
Это позволит url api и любую строку url после /index.php/api/
открыть без логина и все остальное будет предложено войти.
пример:
mywebsite.com/index.php/api
откроется без запроса на вход в систему
mywebsite.com/index.php/api/soap/?wsdl=1
откроется без запроса на логин
mywebsite.com
будет предложено войти первым
другой подход работает так, если область, которую вы защищаете, имеет монолитный PHP-скрипт, контролирующий все, например Wordpress. Настройте аутентификацию в другом каталоге. Положить индекс.php там, который устанавливает cookie по пути '/'. Затем в 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