htaccess varsayılan olarak ebeveyni reddeder, tek düzenli ifade sanal alt yoluna izin verir
Varsayılan olarak tüm anonim kullanıcıları reddetmek, ancak anonim kullanıcılara belirli bir sanal yol için izin vermek istiyorum; sanal yol bir wordpress htaccess + php tarafından oluşturulur
Mevcut Kurulum
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
Order Deny,Allow
Deny from All
<If "%{REQUEST_URI} =~ m#/sites/dawna/wordpress/wp-json/wp/v2/.*#">
Order Allow,Deny
Allow from All
Satisfy Any
</If>
Satisfy Any
Sorun
Yukarıdaki kod tüm kullanıcıları reddeder ve kimlik bilgilerini ister. Ben küresel geçiş Ancak eğer Allow from Allve Ifhiç Deny from Allbeklendiği gibi o zaman bu işlerin, yalnızca belirtilen rotayı inkar
Soru
Diğer her şeyi şifre korumalı hale getirirken anonim ziyaretçilerin sanal rotama girmelerine nasıl izin verebilirim?
Yanıtlar
O sesler siz sadece istenen URL yolu ise kimlik doğrulama için sormak gerek yok toplu erişime izin vermek istediğiniz URL yolu. Aksi takdirde erişime izin verin.
Ayrıca Apache 2.2 kimlik doğrulama yönergelerini bir Apache 2.4 sistemi gibi görünen bir sistemle karıştırıyorsunuz.
Bunun yerine aşağıdakine benzer bir şey deneyin:
<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
</If>
Yukarıdaki, istenen URL'nin başlamadığını /this/urlpath/is/public/( ^örneğinizde bir dize başlangıcı bağlantısının eksik olduğunu ) kontrol eder ve yalnızca başlamazsa kimlik doğrulaması ister. Bu durumda, varsayılan eylem erişime izin vermektir (bu URL yolu ile başlayan herhangi bir URL için).
Sanal yolun doğası gereği (wordpress tarafından oluşturulan) THE_REQUESTbunun yerine kullanmak zorunda kaldım :
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
WordPress yönlendirmesi, wordpress/index.phpbu yüzden kullanmak REQUEST_URIçalışmıyordu çünkü uri her zaman /path/to/wordpress/index.phpmy if ifadesini işe yaramaz hale getiriyor.
NOT
PUT'ları veya diğerlerini desteklemeniz gerekiyorsa, bunu eklemeniz gerekir. [A-Z]{3}Veya [A-Z]{3-6}ikincisi her şeye açılacaktır.