htaccess Access-Control-Allow-Origin


134

Diğer sitelerde harici olarak yüklenen bir komut dosyası oluşturuyorum. CSS ve HTML yüklüyor ve kendi sunucularımda sorunsuz çalışıyor.

Ancak, başka bir web sitesinde denediğimde şu korkunç hatayı gösteriyor:

Access-Control-Allow-Origin

Burada mükemmel bir şekilde yüklendiğini görebilirsiniz: http://tzook.info/bot/

Ancak bu diğer web sitesinde şu hatayı gösteriyor: http://cantloseweight.co/robot/

Yükleme komut dosyasını jsfiddle'a yükledim: http://jsfiddle.net/TL5LK/

Htaccess dosyasını şu şekilde düzenlemeyi denedim:

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

Veya bunun gibi:

Header set Access-Control-Allow-Origin *

Ama yine de çalışmıyor.

Yanıtlar:


270

Bunu harici kök klasörün .htaccess'inde deneyin:

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

Ve sadece .js komut dosyalarıyla ilgiliyse, yukarıdaki kodu bunun içine sarmalısınız:

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

6
Kullanmayla ilgili harika tavsiyeler FilesMatch.
Nate

1
filesmatch bloğunu ekleyerek dosyaları eşleştirirsek, o zaman ne yapar *?
shenkwen

Bunu yaptıktan sonra sunucuyu yeniden başlatmam gerekiyor mu? Ben yukarıdaki kodu uygulamak ancak yine de değiştim, beni \ .json erişmesine izin vermez jsetmek json.
shenkwen

3
@shenkwen *Herhangi bir kaynak etki alanının bu kaynağa erişmesine izin verir. Bu bir kaynak listesi değil, referans alanların bir listesi.
SparK

3
Çalışmıyorsa, headersmodülü etkinleştirmeyi denemelisiniz :a2enmod headers
Joaquín O

53

hiç kimse mod_headers'ı etkinleştirmeniz gerektiğini söylemiyor, bu yüzden hala çalışmıyorsa, şunu deneyin:

(aşağıdaki ipuçları Ubuntu'da çalışır, diğer dağıtımlar hakkında bilgi sahibi değilsiniz)

yüklü modüllerin listesini kontrol edebilirsiniz.

apache2ctl -M

mod_headers'ı etkinleştirmek için kullanabilirsiniz

a2enmod headers

Tabii ki Apache'deki herhangi bir değişiklikten sonra onu yeniden başlatmanız gerekir:

/etc/init.d/apache2 restart

O zaman kullanabilirsin

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

Ve mod_headers aktif değilse, bu satır hiçbir şey yapmayacaktır. Skip if cümlesini deneyebilir ve sadece Header set Access-Control-Allow-Origin "*"yapılandırmanıza ekleyebilirsiniz , o zaman mod_headers etkin değilse, başlatma sırasında hata vermelidir.


3
Google'da bulabildiğim tüm seçenekleri deniyordum ve dediğiniz gibi kimse mod_headers hakkında bir şey söylemedi. Teşekkür!
Sirkong

1
Mod_header'larım aktif ve bu satırı .htaccess'e ekledi (bahsedildiği gibi), ancak yine de şu hatayı alıyorum: Ön kontrol cevabı geçersiz 400..Pls HTTP durum koduna sahip!
Sushivam

1
mod_headers eksik olan şeydi! Bu .htaccess kuralı ile mükemmel bir şekilde çalışıyor. Teşekkür ederim.
Andy

@SachinS 400 hatası bulunamadı, 500 sunucu hatasıdır. Oradan başlayın.
Andy

30

deneyimlerime göre;

o içinden çalışmıyorsa phpbunun .htaccessbenim için çalıştı

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • kimlik bilgileri ajax istek parametrelerinize bağlı olarak doğru veya yanlış olabilir

Bu benim için işe yaramadı ama aynı prensipte php'de çalıştırmayı başardım.
RevNoah 01

16

.htaccessYazı tiplerinize erişmede sorun yaşıyorsanız, yazı tipi klasörünüze aşağıdaki yönergelere sahip bir dosya ekleyin . .Css veya .js dosyalarıyla kullanılmak üzere kolayca değiştirilebilir .

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

1
Yukarıda unutulmamalıdır <FilesMatch>direktifi, gereksizdir eğer yukarıda önerildiği gibi, sizin .htaccessdosyanız yazı dizinde ve fontlar dizin sadece içerir .eot. ttf, .otfVe / veya .woffdosyaları.
Mesagoma

9

Diğer cevaplar benim için işe yaramadı, bu apache2 için hile yaptı:

1) Başlıklar modunu etkinleştirin:

sudo a2enmod headers

2) /etc/apache2/mods-enabled/headers.confDosyayı oluşturun ve ekleyin:

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

3) Sunucunuzu yeniden başlatın:

sudo service apache2 restart


Ubuntu 16.10 sunucumda benim için çalışan tek çözüm budur.
kneeki

Bu benim için de çalıştı. Ubuntu 16.04 sunucusunu kullanıyorum. Teşekkür ederim.
jhedm

Benim için Ubuntu 18.04'te çalıştı. Firefox 70.0.1 sadece Access-Control-Allow-Origin başlığından memnun değildi ve Access-Control-Allow-Methods'ı da eklemek zorunda kaldım.
borizzzzz

@songololo Centos 7'de apache için bu dosyayı bulamadım. / etc / httpd dizininde her yere baktım. Bunu Centos'ta nasıl uygulayabileceğimi bana bildirir misiniz?
Mainuddin

@Mainuddin, üzgünüm, Centos'a aşina değilim. Umarım bir başkası
içeri girebilir

7

Zend Framework 2.0'da bu problemi yaşadım. Htaccess veya php başlığında iki şekilde çözülebilir i .htaccess'i tercih ederim, bu yüzden .htaccess'i şuradan değiştirdim:

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

için

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]

ve çalışmaya başlıyor


Bu benim günümü kurtardı, php couddnt çalıştı, bu yüzden htaccess yaptı.
Relm

4

BTW: .htaccess yapılandırması, API'yi barındıran sunucuda yapılmalıdır. Örneğin, x.com alanında bir AngularJS uygulaması oluşturuyor ve y.com'da bir Rest API oluşturuyorsanız, y.com'un kök klasöründeki .htaccess dosyasında Access-Control-Allow-Origin "*" öğesini x değil .com :)

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

Ayrıca Lukas'ın bahsettiği gibi Apache kullanıyorsanız mod_headers'ı etkinleştirdiğinizden emin olun.



0

Ana makineniz pvn'de değilse veya adanmış değilse, sunucuyu yeniden başlatmak zordur.

Benden daha iyi bir çözüm, sadece kökeninize (alanınız veya www alanınız) font eot, woff vb. Çağıran CSS dosyanızı (başka bir alanda veya alt alanınızda) düzenleyin. sorununuzu çözecektir.

Demek istediğim, css'deki göreli url'yi mutlak url kaynak etki alanına düzenleyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.