Puis-je définir un en-tête Access-Control-Allow-Origin pour toutes les pages d'un domaine et de ses sous-domaines?

Je suis en train d'utiliser une webfont qui je suis légalement autorisé à utiliser, mais pas de distribuer. Je suis d'hébergement de fichiers de polices de caractères sur un domaine distinct utilisé pour le contenu statique. Les deux domaines sont indépendants (l'un n'est pas un sous-domaine de l'autre). Disons que le site à l'aide de la webfont est example.com et le site d'hébergement, il est example.net.

J'ai essayé ce dans le .fichier htaccess sur example.net

<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "example.com"
  </IfModule>
</FilesMatch>

Cependant, cela permet à la police de travailler uniquement sur la page d'accueil de example.com. J'ai essayé de nouveau:

    Header set Access-Control-Allow-Origin "example.com/*"

Maintenant la police fonctionne sur example.com partout à l'exception de la page d'accueilqui est (évidemment) pas ce que je voulais.

Je ne trouve pas de documentation pour cet en-tête. Ce que je veux vraiment, c'est de permettre toutes les pages sur example.com et www.example.com (ou, pour faire bonne mesure, *.example.com). Est-il un moyen simple de faire cela? Je devine que l'en-tête prend une sorte de regex.

À chercher de la documentation, j'ai trouvé,

  • beaucoup de choses sur la façon dont cet en-tête interagit avec l'ajax,
  • beaucoup de notes brèves dire qu'il est nécessaire pour les polices web (au moins dans Firefox).

Je n'ai pas trouvé de documentation sur la syntaxe de l'en-tête lui-même, ou comment spécifier les variantes d'un nom de domaine.

Basé sur une réponse à une question relative à laj'ai essayé ceci:

<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "http(s)?://(www\.)?(example.com)$" AccessControlAllowOrigin=$0$1
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header set Access-Control-Allow-Credentials true
    </IfModule>
</FilesMatch>

Ma compréhension était que cela créerait un en-tête séparée pour chaque demande, permettant à chaque page de requête individuellement pour utiliser la police de caractères. Vérification avec Firebug, même si, il ressemble à l'en-tête est toujours http://example.comà la fois sur la page d'accueil et d'ailleurs. Néanmoins, cela fonctionne, mais me laisse confus. Une question connexe montre que un semblable programme d'installation n'a pas été de travailler pour quelqu'un d'autre. Sa question suggère que, pour lui, il en fait était l'envoi d'un en-tête différent pour chaque page de requête, et que HTTP 304 Not Modified réponses ont donc été la rupture. Sa solution était d'ajouter une always directive de la .htaccessmais pour moi qui a abouti à HTTP 500 erreurs.

Comme il est maintenant, ça fonctionne, et je pense va continuer à travailler quand example.com commutateurs à HTTPS (comme il le fera sous peu). Cependant, je ne peux pas aider mais se sentent que c'est trop compliqué. Il donne le même en-tête, à chaque fois, mais en utilisant complexe "pattern-matching" de le faire. Aussi, bien que je n'ai pas encore de problèmes avec HTTP 304 Not Modified réponses (en fait, je n'ai pas encore vu toutes ces réponses: le navigateur n'est pas simplement demander les fichiers de police à tous jusqu'à ce que j'ai vider le cache), je crains que je pourrais le voir dans l'avenir.

source d'informationauteur TRiG