it-swarm.com.de

verwalten Sie mehrere Domänen mit dem Access-Control-Allow-Origin-Header in Apache

Ich möchte Apache für den domänenübergreifenden Zugriffsheader konfigurieren. Ich habe mehrere Kombinationen aus mehreren Threads im Forum vorgeschlagen. Aber es funktioniert nicht für mich.

Die Wege habe ich ausprobiert:

1) Geben Sie die Domäne in einer anderen Zeile wie folgt mit Header set an: 

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

Mit diesem Setup wird das Kommissionieren nur das Letzte - und der Rest von allem ignoriert.

2) Geben Sie die Domäne in einer anderen Zeile als unten mit Header add an: 

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

Dabei werden alle drei Domänen im Header angezeigt, aber Schriftarten werden von Firefox nicht erkannt.

3.) Mit SetEnvIf versucht, aber es funktioniert nicht: 

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

Endlich mit "*" arbeiten, aber ich möchte das nicht verwenden.

Bitte helfen Sie dabei.

28
Kuldeep

Für 3 Domains in Ihrem .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>

Ich habe es versucht und es funktioniert für mich. Lass es mich wissen, wenn es nicht für dich ist.

34
George

Wenn ich nicht falsch verstanden habe das Handbuch , sollte es sein:

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"

Das Handbuch besagt, dass sich die Aktionen set und add wie folgt verhalten:

set: "Der Antwortheader wird gesetzt und ersetzt jeden vorherigen Header durch diesen Namen."

add: "... Dies kann dazu führen, dass zwei (oder mehrere) Header den gleichen Namen haben. Dies kann zu unvorhergesehenen Konsequenzen führen ..."

16
Jon

So beschränken Sie den Zugriff auf bestimmte URIs, indem Sie diese Dokumente auschecken:

CrossOriginRequestSecurity

Serverseitige Zugriffssteuerung # Apache_examples

Ein hilfreicher Trick besteht darin, eine Apache-Umschreibungsvariable, eine Umgebungsvariable und Header zu verwenden, um Access-Control-Allow- * auf bestimmte URIs anzuwenden. Dies ist beispielsweise nützlich, um Ursprungsanforderungen an GET /api(.*).json-Anforderungen ohne Anmeldeinformationen zu beschränken:

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

Im Allgemeinen gemäß W3 Wiki-CORS Enabled # For_Apache Um den Header anzuzeigen, können Sie die folgende Zeile in den Abschnitten Directory, Location, Files oder in einer .htaccess-Datei hinzufügen.

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

UND, Sie können add anstelle von set verwenden. Beachten Sie jedoch, dass add den Header mehrmals hinzufügen kann. Daher ist die Verwendung von set im Allgemeinen sicherer.

4
Brad Sturtevant

Probieren Sie es aus, es funktioniert für mich. Bewerben in .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
1
MD IRFAN

Für Apache 2.4 habe ich den SET-Befehl für den Apache-Webserver verwendet, um den Header dynamisch festzulegen.

<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>

Der Befehl ADD hat bei mir nicht funktioniert.

0
Manjun Gim

Wird Arbeit 100% sein, in .htaccess anwenden:

# 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]
0
levin