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.
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.
À 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 ..."
Pour restreindre l'accès à certains URI, consultez ces documents:
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.
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
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]