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

Укажите набор заголовков в зависимости от HTTP-реферера

Я работаю над двумя отдельными проектами ReactJS, которые оба используют PHP API. Оба проекта реакции запускаются с сервера разработки на порте 3000 и один на 3001. Поскольку ReactJS на этих портах переходит к API на порту 80, он запускает недопустимый запрос CORS, поэтому я изначально обошел это, добавив следующее в свой Apache Файл:

Header set Access-Control-Allow-Origin: "http://localhost:3000"

Теперь я хочу настроить его так, чтобы я мог установить разные источники разрешения управления доступом в зависимости от того, исходит ли запрос от http://localhost:3000 и http://localhost:3001.

Я пробовал следующее, но ничего из того, что я пробовал, похоже, не работает:

<IfModule %{HTTP_REFERER} == "http://localhost:3001">
    Header set Access-Control-Allow-Origin: "http://localhost:3001"
</IfModule>

<IfModule %{HTTP_REFERER} == "http://localhost:3000">
    Header set Access-Control-Allow-Origin: "http://localhost:3000"
</IfModule>

Но я получаю сообщение об ошибке CORS о том, что я не указал заголовок Access-Control-Allow-Origin.

Возможно ли то, что я пытаюсь сделать, и если да, то как мне достичь того, что я пытаюсь сделать.

ОБНОВИТЬ

Я все еще пытался понять это, @ ezra-s был прав, поскольку я должен был использовать If not IfModule, очевидно, но все еще не делал то, что я ожидал, поэтому ниже показано, что у меня есть сейчас:

<If "%{HTTP_REFERER} == 'http://localhost:3001/'">
    Header set Access-Control-Allow-Origin: "http://localhost:3001"
</If>

<If "%{HTTP_REFERER} == 'http://localhost:3000/'">
    Header set Access-Control-Allow-Origin: "http://localhost:3000"
</If>

Я также обновил журнал доступа к apache, чтобы показать реферер, используя следующий формат журнала:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"" common

И я вижу это ниже в журнале доступа к apache

:: 1 - - [15 / августа / 2020: 14: 55: 38 +0100] "POST /supportportal_api/admin-login.php HTTP / 1.1" 500 5495 "http: // localhost: 3001 /"

Итак, хотя реферер в журнале доступа Apache совпадает с моим оператором If, я все еще получаю следующую ошибку в chrome:

Доступ к выборке по адресу http: //localhost/supportportal_api/admin-login.php из источника http: // localhost: 3001 заблокирован политикой CORS: заголовок Access-Control-Allow-Origin отсутствует на запрошенном ресурсе. Если непрозрачный ответ соответствует вашим потребностям, установите для режима запроса значение 'no-cors', чтобы получить ресурс с отключенным CORS.

Похоже, что по какой-то причине мой оператор If не сопоставляется, но я не вижу причин, почему это не так.