htaccess varsayılan olarak ebeveyni reddeder, tek düzenli ifade sanal alt yoluna izin verir

Jul 19 2019

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

MrWhite Jul 19 2019 at 19:20

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).

Jacksonkr Jul 20 2019 at 02:54

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.