Обрабатывать несколько доменов с заголовком 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
Наконец, работая с "*", но я не хочу использовать это.
Пожалуйста, помогите с этим.
Ответы
Ответ 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