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.