htaccess Access-Control-Allow-Origin

134

Je crée un script qui se charge en externe sur d'autres sites. Il charge CSS et HTML et fonctionne très bien sur mes propres serveurs.

Cependant, lorsque je l'essaye sur un autre site Web, il affiche cette terrible erreur:

Access-Control-Allow-Origin

Ici vous pouvez voir qu'il se charge parfaitement: http://tzook.info/bot/

Mais sur cet autre site Web, il affiche l'erreur: http://cantloseweight.co/robot/

J'ai téléchargé le script de chargement sur jsfiddle: http://jsfiddle.net/TL5LK/

J'ai essayé de modifier le fichier htaccess comme ceci:

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

Ou comme ça:

Header set Access-Control-Allow-Origin *

Mais ça ne marche toujours pas.

Tzook Bar Noy
la source

Réponses:

270

Essayez ceci dans le .htaccess du dossier racine externe:

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

Et si cela ne concerne que les scripts .js, vous devez insérer le code ci-dessus à l'intérieur:

<FilesMatch "\.(js)$">
...
</FilesMatch>
vifargent
la source
6
Bons conseils d'utilisation FilesMatch.
Nate
1
si nous faisons correspondre les fichiers en ajoutant le bloc filesmatch, que fait- *il?
shenkwen
Et dois-je redémarrer le serveur après avoir fait cela? J'applique le code ci-dessus mais il ne me permet toujours pas d'accéder à \ .json, j'ai changé jsen json.
shenkwen
3
@shenkwen Le *permet à n'importe quel domaine d'origine d'accéder à cette ressource. Ce n'est pas une liste de ressources, mais une liste de domaines de référence.
SparK
3
Au cas où cela ne fonctionnerait pas, vous devriez essayer d'activer le headersmodule:a2enmod headers
Joaquín O
53

personne ne dit que vous devez également activer mod_headers , donc si cela ne fonctionne toujours pas, essayez ceci:

(les conseils suivants fonctionnent sur Ubuntu, je ne connais pas les autres distributions)

vous pouvez vérifier la liste des modules chargés avec

apache2ctl -M

pour activer les mod_headers, vous pouvez utiliser

a2enmod headers

bien sûr, après toute modification dans Apache, vous devez le redémarrer:

/etc/init.d/apache2 restart

Ensuite, vous pouvez utiliser

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

Et si mod_headers n'est pas actif, cette ligne ne fera rien du tout. Vous pouvez essayer de sauter la clause if et simplement l'ajouter Header set Access-Control-Allow-Origin "*"à votre configuration, alors cela devrait générer une erreur au démarrage si mod_headers n'est pas actif.

Lukas Liesis
la source
3
essayé toutes les options que je pouvais trouver sur Google et, comme vous l'avez dit, personne n'a rien dit à propos de mod_headers. Remercier!
Sirkong
1
Mes mod_headers sont actifs et ont ajouté cette ligne dans .htaccess (même endroit que mentionné), mais j'obtiens toujours cette erreur: La réponse pour le contrôle en amont a un code d'état HTTP invalide 400..Pls suggèrent!
Sushivam
1
mod_headers était la chose manquante! Cela fonctionne parfaitement avec la règle .htaccess. Je vous remercie.
Andy
@SachinS une erreur 400 est introuvable, 500 est une erreur de serveur. Commencez par là.
Andy
30

selon mon expérience;

si elle ne fonctionne pas à l' intérieur phpfaire dans .htaccesscela a fonctionné pour moi

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • les informations d'identification peuvent être vraies ou fausses en fonction de vos paramètres de demande ajax
vknyvz
la source
Cela n'a pas fonctionné pour moi mais j'ai pu le faire fonctionner en php, même principe.
RevNoah
16

Ajoutez un .htaccessfichier avec les directives suivantes à votre dossier de polices, si vous rencontrez des problèmes pour accéder à vos polices. Peut facilement être modifié pour une utilisation avec des fichiers .css ou .js .

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>
Thoman
la source
1
Il convient de noter que ce qui précède <FilesMatch>directive est inutile, si , comme l'a suggéré ci - dessus, votre .htaccessfichier est dans votre répertoire de polices et votre répertoire de polices ne contient .eot,. ttf, .otfet / ou .wofffichiers.
Mesagoma
9

Les autres réponses n'ont pas fonctionné pour moi, c'est ce qui a fini par faire l'affaire pour apache2:

1) Activez le mod des en-têtes:

sudo a2enmod headers

2) Créez le /etc/apache2/mods-enabled/headers.conffichier et insérez:

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

3) Redémarrez votre serveur:

sudo service apache2 restart

songololo
la source
C'est la seule solution qui a fonctionné pour moi sur mon serveur Ubuntu 16.10.
Kneeki
Cela a fonctionné aussi pour moi. J'utilise le serveur Ubuntu 16.04. Je vous remercie.
jhedm
A travaillé pour moi sur Ubuntu 18.04. Firefox 70.0.1 n'était pas content de l'en-tête Access-Control-Allow-Origin, et j'ai dû ajouter celui Access-Control-Allow-Methods.
borizzzzz
@songololo Je n'ai pas pu localiser ce fichier pour apache dans Centos 7. J'ai cherché partout dans le répertoire / etc / httpd. Pouvez-vous me faire savoir comment puis-je l'implémenter sur Centos?
Mainuddin
@Mainuddin, désolé, je ne connais pas Centos. J'espère que quelqu'un d'autre pourra intervenir.
songololo
7

Dans Zend Framework 2.0, j'ai eu ce problème. Peut être résolu de deux manières .htaccess ou en-tête php je préfère .htaccess donc j'ai modifié .htaccess à partir de:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

à

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

et ça commence à marcher


la source
Cela m'a sauvé la journée, php couddnt work, donc htaccess l'a fait.
Relm
4

BTW: la configuration .htaccess doit être effectuée sur le serveur hébergeant l'API. Par exemple, vous créez une application AngularJS sur le domaine x.com et créez une API Rest sur y.com, vous devez définir Access-Control-Allow-Origin "*" dans le fichier .htaccess sur le dossier racine de y.com et non de x .com :)

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

Aussi, comme Lukas l'a mentionné, assurez-vous d'avoir activé mod_headers si vous utilisez Apache

Saman Shafigh
la source
1

Assurez-vous qu'aucune redirection n'est en cours. Cela peut se produire si vous n'incluez pas la barre oblique de fin dans l'URL.

Voir cette réponse pour plus de détails - https://stackoverflow.com/a/27872891/614524

JDavis
la source
0

Si votre hôte n'est pas en pvn ou dédié, il est difficile de redémarrer le serveur.

Meilleure solution de ma part, éditez simplement votre fichier CSS (sur un autre domaine ou votre sous-domaine) qui appelle la police eot, woff, etc. à votre origine (votre domaine ou www votre domaine). cela résoudra votre problème.

Je veux dire, modifiez l'URL relative sur css en domaine d'origine de l'URL absolue

Hans Ganteng
la source