J'ai fait un peu de jeu autour de cette question et est venu avec cette réutilisables .htaccess (ou httpd.conf) solution qui fonctionne avec Apache:
<IfModule mod_rewrite.c>
<IfModule mod_headers.c>
# Define the root domain that is allowed
SetEnvIf Origin .+ ACCESS_CONTROL_ROOT=yourdomain.com
# Check that the Origin: matches the defined root domain and capture it in
# an environment var if it does
RewriteEngine On
RewriteCond %{ENV:ACCESS_CONTROL_ROOT} !=""
RewriteCond %{ENV:ACCESS_CONTROL_ORIGIN} =""
RewriteCond %{ENV:ACCESS_CONTROL_ROOT}&%{HTTP:Origin} ^([^&]+)&(https?://(?:.+?\.)?\1(?::\d{1,5})?)$
RewriteRule .* - [E=ACCESS_CONTROL_ORIGIN:%2]
# Set the response header to the captured value if there was a match
Header set Access-Control-Allow-Origin %{ACCESS_CONTROL_ORIGIN}e env=ACCESS_CONTROL_ORIGIN
</IfModule>
</IfModule>
Il suffit de régler l' ACCESS_CONTROL_ROOT
variable au sommet de l'îlot à la racine de votre domaine, et il se fera l'écho de l' Origin:
- tête de la requête de la valeur pour le client dans l' Access-Control-Allow-Origin:
- tête de réponse de valeur que si elle correspond à votre domaine.
Notez également que vous pouvez utiliser sub.mydomain.com
le ACCESS_CONTROL_ROOT
et limitera les origines de sub.mydomain.com
et *.sub.mydomain.com
(c'est à dire qu'il n'a pas à être la racine du domaine). Les éléments qui sont autorisés à varier (le protocole, le port) peut être contrôlée par la modification de l'URI de la partie correspondante de la regex.