Подтвердить что ты не робот

Обрабатывать несколько доменов с заголовком Access-Control-Allow-Origin в Apache

Я хочу настроить apache для междоменного заголовка доступа. Я пробовал несколько комбинаций, как это было предложено по количеству потоков на форуме. Но он не работает для меня.

Пути, я пробовал:

1) Укажите домен в другой строке, как показано ниже, с помощью Header set:

Header set Access-Control-Allow-Origin "example1.com"
Header set Access-Control-Allow-Origin "example2.com"
Header set Access-Control-Allow-Origin: "example3.com"

С помощью этой настройки выберем только последний и проигнорируем остальную часть.

2) Укажите домен в другой строке, как показано ниже, с помощью Header add:

Header add Access-Control-Allow-Origin "example1.com"
Header add Access-Control-Allow-Origin "example2.com"
Header add Access-Control-Allow-Origin: "example3.com"

С этим он показывает все три домена в заголовке, но шрифты не попадают в Firefox.

3.) Пробовал с помощью SetEnvIf, но опять же не работал:

SetEnvIf Origin "http(s)?://(www\.)?(mydomain.com|mydomain2.com)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin

Наконец, работая с "*", но я не хочу использовать это.

Пожалуйста, помогите с этим.

4b9b3361

Ответ 1

Для 3 доменов в вашем .htaccess:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(domain1.org|domain2.com|domain3.net)$" AccessControlAllowOrigin=$0$1
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>

Я пробовал это, и он работает для меня. Дайте мне знать, если это не для вас.

Ответ 2

Если я не понимаю руководство, оно должно быть:

Header always append Access-Control-Allow-Origin: "example1.com"
Header always append Access-Control-Allow-Origin: "example2.com"
Header always append Access-Control-Allow-Origin: "example3.com"

В руководстве указано, что действия set и add ведут себя следующим образом:

set: "Заголовок ответа настроен, заменив любой предыдущий заголовок на это имя

добавить: "... Это может привести к тому, что два (или более) заголовка имеют одно и то же имя, что может привести к непредвиденным последствиям..."

Ответ 3

Чтобы ограничить доступ к определенным файлам URI, выполните следующие действия:

CrossOriginRequestSecurity

Серверный контроль доступа Apache_examples

Один полезный трюк заключается в использовании перезаписи Apache, переменной окружения и заголовков для применения Access-Control-Allow- * к определенным URI. Это полезно, например, для ограничения запросов на кросс-начало для запросов GET/api (.*).json без учетных данных:

RewriteRule ^/api(.*)\.json$ /api$1.json [CORS=True]
Header set Access-Control-Allow-Origin "*" env=CORS
Header set Access-Control-Allow-Methods "GET" env=CORS
Header set Access-Control-Allow-Credentials "false" env=CORS

Кроме того, в общем, согласно W3 Wiki - CORS Enabled # For_Apache Чтобы открыть заголовок, вы можете добавить следующую строку в разделе "Каталог, местоположение и файлы" или в файле .htaccess.

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "*"
</IfModule>

И вы можете использовать add, а не задавать, но имейте в виду, что add может добавлять заголовок несколько раз, поэтому, как правило, безопаснее использовать set.

Ответ 4

Попробуйте это, это работает для меня. Применить в .htaccess:

SetEnvIf Origin "^http(s)?://(.+\.)?(domain\.org|domain2\.com)$" origin_is=$0 
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is

Ответ 5

Будет работать 100%, применить в .htaccess:

# Enable cross domain access control
SetEnvIf Origin "^http(s)?://(.+\.)?(domain1\.com|domain2\.org|domain3\.net)$" REQUEST_ORIGIN=$0
Header always set Access-Control-Allow-Origin %{REQUEST_ORIGIN}e env=REQUEST_ORIGIN
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "x-test-header, Origin, X-Requested-With, Content-Type, Accept"

# Force to request 200 for options
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]

Ответ 6

Для Apache 2.4 я использовал команду SET для веб-сервера Apache для динамической установки заголовка.

<IfModule mod_deflate.c>
  # CORS
  SetEnvIfNoCase Origin "http(s)?://(\w+\.)?(example.com|localhost)(:[0-9]+)?$" AccessControlAllowOrigin=$0
  Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
  Header set Access-Control-Allow-Credentials true
</IfModule>

Команда ADD не работает для меня.

Ответ 7

Это работает для меня в классическом ASP:

If Request.ServerVariables("HTTP_ORIGIN") = "http://domain1.com" Then
  Response.AddHeader "Access-Control-Allow-Origin","http://domain1.com"
ElseIf Request.ServerVariables("HTTP_ORIGIN") = "http://domain2.com" Then
  Response.AddHeader "Access-Control-Allow-Origin","http://domain2.com"
'and so on
End If