Я хочу по умолчанию запретить всем анонимным пользователям, но разрешить анонимным пользователям определенный виртуальный путь; виртуальный путь создается wordpress htaccess + php
Текущая настройка
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
Проблема
Приведенный выше код запрещает всем пользователям и запрашивает учетные данные. Однако, если я переключусь на глобальный Allow from All
и If
к Deny from All
тогда это работает, как ожидалось, только отклоняя указанный маршрут
Вопрос
Как я могу разрешить анонимным посетителям мой виртуальный маршрут, сделав все остальное защищенным паролем?
Из-за характера виртуального пути (созданного wordpress) мне пришлось использовать THE_REQUEST
вместо:
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
Редирект WordPress использует wordpress/index.php
так что используя REQUEST_URI
не работал, потому что URI всегда /path/to/wordpress/index.php
делает бесполезным оператор my if.
НОТА
Если вам нужно поддерживать PUT или что-то еще, вам нужно будет добавить это. [A-Z]{3}
или [A-Z]{3-6}
где последний откроется всему.
Судя по всему, вам нужно только запросить аутентификацию, если запрошенный URL-путь не URL-путь, к которому вы хотите разрешить публичный доступ. В противном случае просто разрешите доступ.
Вы также смешиваете директивы аутентификации Apache 2.2 в том, что может показаться системой Apache 2.4.
Вместо этого попробуйте что-нибудь вроде следующего:
<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
</If>
Вышеупомянутое проверяет, что запрошенный URL не запускается /this/urlpath/is/public/
(вам не хватало привязки начала строки ^
в вашем примере) и запрашивает аутентификацию, только если это не так. Затем действие по умолчанию - разрешить доступ (для любого URL-адреса, начинающегося с этого URL-пути).