В настоящее время htaccess запрещает всем пользователям. Я хочу разрешить только JSON-канал из WordPress быть доступным для всех пользователей
Из расположения файла htaccess URL-адрес канала следующий:
./row/wordpress/wp-json/wp/v2/screen
Вопрос
Насколько я понимаю, это "виртуальный" URL, созданный правилами перезаписи. Поскольку это не фактический файл, а просто конечная точка, как мне разрешить любому пользователю получить к нему доступ?
Текущая попытка
Вот моя текущая попытка, которая блокирует всех пользователей без пароля. Мой Files
узел ничего не делает.
// root folder's .htaccess
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user SecretUser
Order Deny,Allow
Deny from All
<Files "row/wordpress/wp-json/wp/v2/screen">
Allow from all
</Files>
Satisfy Any
Вопрос
Как сделать так, чтобы виртуальный путь ./row/wordpress/wp-json/wp/v2/screen
был виден всем моим посетителям?
** редактировать **
С тех пор я попробовал оба варианта.
<Directory row/wordpress/wp-json/v2/>
Allow from All
</Directory>
<Location row/wordpress/wp-json/v2/>
Allow from All
</Location>
Не имея успеха, они оба вызывают 501
решение1
Вот два разных подхода, позволяющих одному URL-адресу, независимо от того, ссылается ли он на физический файл или нет, обойти базовую аутентификацию по паролю:
Вариант 1: разрешить защиту одного URL-адреса паролем:
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/domains/dev/.htpasswd
Require expr %{REQUEST_URI} == '/row/wordpress/wp-json/wp/v2/screen'
Require user SecretUser
Вариант 2: Применить защиту паролем ко всем запросам, которые не соответствуют определенному URL-адресу (для этого варианта требуется Apache 2.4):
<If "%{REQUEST_URI} != '/row/wordpress/wp-json/wp/v2/screen'">
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/domains/dev/.htpasswd
Require user SecretUser
</If>
решение2
Из-за особенностей виртуального пути (созданного 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}
где последнее будет открыто для всего.