Muszę wykluczyć jeden adres URL (lub jeszcze lepiej jeden prefiks) z normalnej ochrony htaccess Basic Auth. Coś w stylu /callbacks/myBank
lub /callbacks/.*
Czy masz jakieś wskazówki, jak to zrobić?
Nie szukam sposobu wykluczenia pliku. Musi to być adres URL (ponieważ jest to rozwiązanie oparte na frameworku PHP, a wszystkie adresy URL są przekierowywane mod_rewrite
do index.php
). Więc nie ma pliku pod tym adresem URL. Nic.
Niektóre z tych adresów URL to po prostu wywołania zwrotne z innych usług (adres IP nie jest znany, więc nie mogę wykluczyć na podstawie adresu IP) i nie mogą monitować o użytkownika / hasło.
Obecna definicja jest tak prosta, jak:
AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd
require valid-user
źródło
%{REQUEST_URI}
wartość jest przepisanym ciągiem. W przypadku Cake 3 kończy się to prawie zawsze/webroot/index.php
. Być może będziesz musiał wymyślić alternatywne podejście, takie jak użycie samego Cake do obsługi uwierzytelniania tras.Używając SetEnvIf , możesz utworzyć zmienną, gdy żądanie zaczyna się od jakiejś ścieżki, a następnie użyć
Satisfy Any
dyrektywy, aby uniknąć konieczności logowania.Fragment dyrektywy allow / deny w dyrektywach mówi, że odmawia dostępu KAŻDEMU , z wyjątkiem sytuacji, gdy istnieje poprawny użytkownik (pomyślne logowanie BASIC) lub gdy
noauth
zmienna jest ustawiona.źródło
Order deny,allow
i to nie zadziała. Nie trzeba dodawać, że bardzo frustrujące!Allow from env=REDIRECT_noauth
ponownego zapisania adresów URL. To mógł być problem z @vishal. Zajrzyj tutaj: [ stackoverflow.com/a/41092497/1285585]Allow from env=noauth
iAllow from env=REDIRECT_noauth
żeby to działało.To rozwiązanie działa całkiem nieźle, wystarczy zdefiniować białą listę, przez którą chcesz przejść.
źródło
Wypróbowałem inne rozwiązania, ale to zadziałało. Miejmy nadzieję, że pomoże to innym.
Umożliwi to
/index.php/api/
otwarcie adresu URL interfejsu API i dowolnego ciągu adresu URL bez konieczności logowania się, a cokolwiek innego zostanie poproszone o zalogowanie.Przykład:
mywebsite.com/index.php/api
otworzy się bez monitu o zalogowaniemywebsite.com/index.php/api/soap/?wsdl=1
się otworzy bez pytania o zalogowaniemywebsite.com
zostanie wyświetlony monit o zalogowanie się w pierwszej kolejnościźródło
źródło
Inne podejście działa w ten sposób, jeśli chroniony obszar ma monolityczny skrypt PHP kontrolujący wszystko, na przykład Wordpress. Skonfiguruj uwierzytelnianie w innym katalogu. Umieść tam plik index.php, który ustawia plik cookie na ścieżce „/”. Następnie w Wordpress (na przykład) sprawdź plik cookie, ale pomiń sprawdzanie, czy $ _SERVER ['REQUEST_URI'] jest wykluczonym adresem URL.
Na mojej wspólnej platformie hostingowej RewriteRule nie może ustawić zmiennej środowiskowej, która działałaby z „Satisfy any”.
Przy każdym podejściu uważaj, że chroniona strona nie zawiera obrazów, arkuszy stylów itp., Które powodują żądanie uwierzytelnienia, gdy sama strona nie.
źródło
Dodaj poniższy kod do głównego pliku htaccess i nie zapomnij zmienić adresu URL administratora, strony pliku .htpasswd.
Utwórz plik .htpasswd w folderze głównym i dodaj poniżej nazwę użytkownika i hasło (ustaw domyślną nazwę użytkownika: admin i hasło: admin123)
Daj mi znać, jeśli nadal masz jakiś problem.
źródło
dlaczego po prostu nie użyjesz uwierzytelniania podstawowego zgodnie z przeznaczeniem?
źródło