Я работаю над двумя отдельными проектами 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 не сопоставляется, но я не вижу причин, почему это не так.