Назад | Перейти на главную страницу

htaccess разрешить определенный путь

В настоящее время 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

Вот два разных подхода, позволяющих одному 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>

Из-за характера виртуального пути (созданного 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} где последний откроется всему.