htaccess Access-Control-Allow-Origin

134

Saya membuat skrip yang memuat secara eksternal di situs lain. Ini memuat CSS dan HTML dan berfungsi dengan baik di server saya sendiri.

Namun, ketika saya mencobanya di situs web lain ia menampilkan kesalahan mengerikan ini:

Access-Control-Allow-Origin

Di sini Anda dapat melihatnya memuat dengan sempurna: http://tzook.info/bot/

Tetapi di situs web lain ini menunjukkan kesalahan: http://cantloseweight.co/robot/

Saya mengunggah skrip pemuatan ke jsfiddle: http://jsfiddle.net/TL5LK/

Saya mencoba mengedit file htaccess seperti ini:

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

Atau seperti ini:

Header set Access-Control-Allow-Origin *

Tapi itu masih tidak berhasil.

Tzook Bar Noy
sumber

Jawaban:

269

Coba ini di .htaccess folder root eksternal:

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

Dan jika itu hanya menyangkut skrip .js, Anda harus membungkus kode di atas di dalam ini:

<FilesMatch "\.(js)$">
...
</FilesMatch>
vifargent
sumber
6
Saran bagus untuk menggunakan FilesMatch.
Nate
1
jika kita mencocokkan file dengan menambahkan blok filesmatch, lalu apa fungsinya *?
shenkwen
Dan apakah saya perlu me-restart server setelah melakukan ini? Saya menerapkan kode di atas tetapi masih tidak mengizinkan saya mengakses \ .json, saya berubah jsmenjadi json.
shenkwen
3
@shenkwen The *memungkinkan domain asal untuk mengakses sumber ini. Ini bukan daftar sumber daya, tetapi daftar domain referensi.
SparK
3
Jika tidak berhasil, Anda harus mencoba mengaktifkan headersmodul:a2enmod headers
Joaquín O
53

tidak ada yang mengatakan bahwa Anda juga harus mengaktifkan mod_headers , jadi jika masih tidak berfungsi, coba ini:

(tips berikut berfungsi di Ubuntu, tidak tahu tentang distro lain)

Anda dapat memeriksa daftar modul yang dimuat dengan

apache2ctl -M

untuk mengaktifkan mod_headers yang dapat Anda gunakan

a2enmod headers

tentu saja setelah ada perubahan di Apache Anda harus me-restart itu:

/etc/init.d/apache2 restart

Maka Anda bisa menggunakannya

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

Dan jika mod_headers tidak aktif, baris ini tidak akan melakukan apa pun. Anda dapat mencoba melewati jika klausa dan menambahkan Header set Access-Control-Allow-Origin "*"konfigurasi Anda, maka itu akan melempar kesalahan saat mulai jika mod_headers tidak aktif.

Lukas Liesis
sumber
3
telah mencoba semua opsi yang dapat saya temukan di Google dan, seperti yang Anda katakan, tidak ada yang mengatakan apa pun tentang mod_headers. Terima kasih!
Sirkong
1
Mod_headers saya aktif dan menambahkan baris ini dalam .htaccess (tempat yang sama dengan yang disebutkan), tetapi masih mendapatkan kesalahan ini: Respons untuk preflight memiliki kode status HTTP yang tidak valid 400..Mohon sarankan!
Sushivam
1
mod_headers adalah hal yang hilang! Ini berfungsi sempurna dengan aturan .htaccess. Terima kasih.
Andy
@SachinS kesalahan 400 tidak ditemukan, 500 adalah kesalahan server. Mulai dari sana.
Andy
30

dari pengalaman saya;

jika tidak bekerja dari dalam, phplakukan ini di .htaccessdalamnya bekerja untuk saya

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • kredensial bisa benar atau salah tergantung pada params permintaan ajax Anda
vknyvz
sumber
Ini tidak berhasil untuk saya tetapi saya bisa membuatnya bekerja di php, prinsip yang sama.
RevNoah
16

Tambahkan .htaccessfile dengan arahan berikut ke folder font Anda, jika memiliki masalah mengakses font Anda. Dapat dengan mudah dimodifikasi untuk digunakan dengan file .css atau .js .

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>
Thoman
sumber
1
Perlu dicatat bahwa <FilesMatch>arahan di atas tidak perlu, jika , seperti yang disarankan di atas, .htaccessfile Anda ada di direktori font Anda dan direktori font Anda hanya berisi .eot,. ttf, .otfdan / atau .wofffile.
Mesagoma
9

Jawaban lain tidak berhasil untuk saya, inilah yang akhirnya melakukan trik untuk apache2:

1) Aktifkan tajuk mod:

sudo a2enmod headers

2) Buat /etc/apache2/mods-enabled/headers.conffile dan masukkan:

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

3) Mulai ulang server Anda:

sudo service apache2 restart

songololo
sumber
Ini adalah satu-satunya solusi yang bekerja untuk saya di server Ubuntu 16.10 saya.
kneeki
Ini berhasil juga untuk saya. Saya menggunakan server Ubuntu 16.04. Terima kasih.
jhedm
Bekerja untuk saya di Ubuntu 18.04. Firefox 70.0.1 tidak senang hanya dengan header Access-Control-Allow-Origin, dan saya harus menambahkan juga Access-Control-Allow-Methods.
borizzzzz
@songololo Saya tidak dapat menemukan file ini untuk apache di Centos 7. Saya mencari di mana-mana di direktori / etc / httpd. Bisakah Anda memberi tahu saya cara menerapkannya di Centos?
Mainuddin
@Mainuddin, maaf, saya tidak terbiasa dengan Centos. Semoga orang lain bisa
berbaur
7

Di Zend Framework 2.0 saya punya masalah ini. Dapat diselesaikan dengan dua cara .htaccess atau header php saya lebih suka .htaccess jadi saya memodifikasi .htaccess dari:

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

untuk

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]

dan mulai bekerja


sumber
Ini menyelamatkan hari saya, php tidak bisa bekerja, jadi htaccess melakukannya.
Relm
4

BTW: .htaccess config harus dilakukan di server hosting API. Misalnya Anda membuat aplikasi AngularJS di domain x.com dan membuat API Istirahat di y.com, Anda harus mengatur Access-Control-Allow-Origin "*" di file .htaccess pada folder root y.com bukan x .com :)

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

Juga seperti yang disebutkan Lukas pastikan Anda telah mengaktifkan mod_headers jika Anda menggunakan Apache

Saman Shafigh
sumber
1

Pastikan Anda tidak mengalami pengalihan. Ini bisa terjadi jika Anda tidak menyertakan garis miring di URL.

Lihat jawaban ini untuk detail lebih lanjut - https://stackoverflow.com/a/27872891/614524

JDavis
sumber
0

Jika tuan rumah Anda tidak di pvn atau berdedikasi, sulit untuk me-restart server.

Solusi yang lebih baik dari saya, cukup edit file CSS Anda (di domain lain atau subdomain Anda) yang memanggil font eot, woff dll ke asal Anda (domain Anda atau www domain Anda). itu akan menyelesaikan masalah Anda.

Maksud saya, edit url relatif pada css ke domain asal url absolut

Hans Ganteng
sumber