htaccess Access-Control-Allow-Origin


134

Sto creando uno script che viene caricato esternamente su altri siti. Carica CSS e HTML e funziona perfettamente sui miei server.

Tuttavia, quando lo provo su un altro sito Web viene visualizzato questo terribile errore:

Access-Control-Allow-Origin

Qui puoi vedere che si carica perfettamente: http://tzook.info/bot/

Ma su questo altro sito web mostra l'errore: http://cantloseweight.co/robot/

Ho caricato lo script di caricamento su jsfiddle: http://jsfiddle.net/TL5LK/

Ho provato a modificare il file htaccess in questo modo:

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

O così:

Header set Access-Control-Allow-Origin *

Ma non funziona ancora.

Risposte:


270

Prova questo nel .htaccess della cartella radice esterna:

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

E se riguarda solo gli script .js, dovresti racchiudere il codice sopra all'interno di questo:

<FilesMatch "\.(js)$">
...
</FilesMatch>

6
Ottimo consiglio sull'uso FilesMatch.
— Nate,

1
se abbiniamo i file aggiungendo il blocco filesmatch, che cosa fa *?
— shenkwen,

E devo riavviare il server dopo averlo fatto? Applico il codice sopra ma non mi consente ancora di accedere a \ .json, ho cambiato jsin json.
— shenkwen,

3
@shenkwen Il *consente a qualsiasi dominio di origine di accedere a questa risorsa. Non è un elenco di risorse, ma un elenco di domini di riferimento.
— SparK,

3
Se non funziona, dovresti provare ad abilitare il headersmodulo:a2enmod headers
— Joaquín O

53

nessuno dice che devi anche avere mod_headers abilitato, quindi se ancora non funziona, prova questo:

(i seguenti suggerimenti funzionano su Ubuntu, non sono a conoscenza di altre distribuzioni)

puoi controllare l'elenco dei moduli caricati con

apache2ctl -M

per abilitare mod_headers che puoi usare

a2enmod headers

ovviamente dopo eventuali modifiche in Apache è necessario riavviarlo:

/etc/init.d/apache2 restart

Quindi puoi usare

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

E se mod_headers non è attivo, questa linea non farà nulla. Puoi provare a saltare la clausola if e aggiungere semplicemente la Header set Access-Control-Allow-Origin "*"tua configurazione, quindi dovrebbe lanciare un errore durante l'avvio se mod_headers non è attivo.


3
ho provato tutte le opzioni che ho trovato su Google e, come hai detto, nessuno ha detto nulla su mod_headers. Grazie!
— Sirkong,

1
I miei mod_headers sono attivi e hanno aggiunto questa riga in .htaccess (stesso posto come menzionato), ma sto ancora ricevendo questo errore: la risposta per il preflight ha un codice di stato HTTP non valido 400..Pls suggerisce!
— Sushivam,

1
mod_headers era la cosa mancante! Funziona perfettamente con la regola .htaccess. Grazie.
— Andy,

@SachinS non è stato trovato un errore 400, 500 è un errore del server. Inizia lì.
— Andy,

30

dalla mia esperienza;

se non funziona dall'interno, phpfallo .htaccessper me

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • le credenziali possono essere vere o false a seconda dei parametri della richiesta Ajax

Questo non ha funzionato per me, ma sono stato in grado di farlo funzionare in php, stesso principio.
— RevNoah,

16

Aggiungi un .htaccessfile con le seguenti direttive nella cartella dei caratteri, se hai problemi ad accedere ai caratteri. Può essere facilmente modificato per l'uso con file .css o .js .

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

1
Si deve notare che quanto sopra <FilesMatch>direttiva non è necessaria, se , come suggerito sopra, il .htaccessfile si trova nella cartella dei font e la directory dei font solo contiene .eot,. ttf, .otfE / o .wofffile.
— Mesagoma,

9

Le altre risposte non hanno funzionato per me, questo è ciò che ha finito per fare il trucco per apache2:

1) Abilita la mod delle intestazioni:

sudo a2enmod headers

2) Crea il /etc/apache2/mods-enabled/headers.conffile e inserisci:

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

3) Riavvia il server:

sudo service apache2 restart


Questa è l'unica soluzione che ha funzionato per me sul mio server Ubuntu 16.10.
— kneeki,

Questo ha funzionato anche per me. Sto usando il server Ubuntu 16.04. Grazie.
— jhedm,

Ha funzionato per me su Ubuntu 18.04. Firefox 70.0.1 non era soddisfatto solo dell'intestazione Access-Control-Allow-Origin, e ho dovuto aggiungere anche quello Access-Control-Allow-Methods.
— Borizzzzz,

@songololo Non sono riuscito a trovare questo file per apache in Centos 7. Ho cercato ovunque nella directory / etc / httpd. Potete per favore fatemi sapere come posso implementarlo su Centos?
— Mainuddin,

@Mainuddin, scusa, non ho familiarità con Centos. Spero che qualcun altro possa
— entrare

7

In Zend Framework 2.0 ho avuto questo problema. Può essere risolto in due modi .htaccess o intestazione php preferisco .htaccess quindi ho modificato .htaccess da:

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

per

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]

e inizia a funzionare


Questo mi ha salvato la giornata, php non poteva funzionare, quindi l'ha fatto htaccess.
— Relm

4

A proposito: la configurazione .htaccess deve essere eseguita sul server che ospita l'API. Ad esempio, se crei un'app AngularJS sul dominio x.com e crei un'API Rest su y.com, devi impostare Access-Control-Allow-Origin "*" nel file .htaccess nella cartella principale di y.com non x .com :)

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

Inoltre, come menzionato da Lukas, assicurati di aver abilitato mod_headers se usi Apache



0

Se il tuo host non è su pvn o dedicato, è difficile riavviare il server.

Migliore soluzione da parte mia, basta modificare il tuo file CSS (su un altro dominio o sottodominio) che chiama font eot, woff ecc. Alla tua origine (tuo dominio o www tuo dominio). risolverà il tuo problema.

Voglio dire, modifica l'URL relativo su CSS al dominio di origine dell'URL assoluto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.