web-dev-qa-db-fra.com

gérer plusieurs domaines avec l'en-tête Access-Control-Allow-Origin dans Apache

Je veux configurer Apache pour un en-tête d'accès entre domaines. J'ai essayé plusieurs combinaisons comme suggéré sur le nombre de sujets sur le forum. Mais ça ne marche pas pour moi.

Les manières, j'ai essayé:

1) Spécifiez le domaine sur une autre ligne comme ci-dessous avec 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"

Avec cette configuration, il choisit seulement le dernier et ignore le reste.

2) Spécifiez le domaine sur une autre ligne comme ci-dessous avec 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"

Avec cela, il affiche les trois domaines dans l’en-tête, mais les polices ne sont pas récupérées sur Firefox.

3.) essayé d'utiliser SetEnvIf, mais encore une fois, cela ne fonctionne pas: 

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

Enfin travailler avec "*", mais je ne veux pas utiliser ceci.

S'il vous plaît aider avec cela.

28
Kuldeep

Pour 3 domaines, dans votre .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>

J'ai essayé cela et ça marche pour moi. Faites-moi savoir si ce n'est pas pour vous.

34
George

À moins que je ne comprenne mal le manuel , il devrait être:

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"

Le manuel indique que les actions set et add se comportent comme suit:

set: "L'en-tête de réponse est défini et remplace tout en-tête précédent par ce nom"

add: "... Cela peut donner deux (ou plusieurs) en-têtes ayant le même nom. Cela peut avoir des conséquences imprévues ..."

16
Jon

Pour restreindre l'accès à certains URI, consultez ces documents:

CrossOriginRequestSecurity

Contrôle d'accès côté serveur # Apache_examples

Une astuce utile consiste à utiliser une réécriture Apache, une variable d’environnement et des en-têtes pour appliquer Access-Control-Allow- * à certains URI. Ceci est utile, par exemple, pour contraindre les demandes cross-origin à des requêtes GET /api(.*).json sans informations d'identification:

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

Aussi, en général, selon W3 Wiki - CORS Activé # For_Apache Pour afficher l’en-tête, vous pouvez ajouter la ligne suivante dans les sections Directory, Location et Files, ou dans un fichier .htaccess.

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

ET, vous pouvez utiliser add plutôt que set, mais sachez que add peut ajouter l'en-tête plusieurs fois. Il est donc généralement plus sûr d'utiliser set.

4
Brad Sturtevant

Essayez celui-ci, cela fonctionne pour moi. Appliquer dans .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

Sera travail 100%, Postulez en .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]
0
levin