2012-11-16 15 views
76

Tworzę skrypt ładowany zewnętrznie na inne strony. Ładuje CSS i HTML i działa dobrze na moich serwerach.htaccess Access-Control-Allow-Origin

Jednak gdy próbuję go na innej stronie wyświetla ten straszny błąd:

Access-Control-Allow-Origin 

Tutaj można zobaczyć go ładuje idealnie: http://tzook.info/bot/

Ale na tej drugiej stronie pokazuje błąd: http://cantloseweight.co/robot/

upload skrypt ładowania do jsfiddle: http://jsfiddle.net/TL5LK/

Próbowałem edycji pliku .htaccess tak:

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

Albo tak:

Header set Access-Control-Allow-Origin * 

Ale to nadal nie działa.

Odpowiedz

154

Spróbuj to w .htaccess zewnętrznego folderu głównego:

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

A jeśli skrypty To dotyczy tylko .js należy owinąć powyższy kod wewnątrz to:

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

świetne porady na temat używania 'FilesMatch'. – Nate

+1

jeśli dopasowujemy pliki, dodając blok typu filesmatch, to co robi '*'? – shenkwen

+0

Czy muszę ponownie uruchomić serwer po wykonaniu tej czynności? Stosuję powyższy kod, ale nadal nie pozwala mi uzyskać dostępu do \ .json, zmieniłem 'js' na' json'. – shenkwen

20

z mojego doświadczenia ;

jeśli to nie działa od wewnątrz php zrobić w .htaccess pracował dla mnie

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin http://www.vknyvz.com 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 
  • poświadczenia mogą być prawdziwe lub fałszywe w zależności od żądania ajax params
+1

To jedyny problem, który działa! Wielkie dzięki!!! – barbushin

+0

Nie działa to dla mnie, ale udało mi się go uruchomić w php z tą samą zasadą. – RevNoah

+1

Pracował świetnie, dzięki! – Gavin

27

nikt mówi, że musisz też mieć włączone mod_headers, więc jeśli nadal nie działa, spróbuj tego:

(Poniższe porady działa na Ubuntu, nie wiem o innych dystrybucjach)

można sprawdzić listę załadowanych modułów z

apache2ctl -M 

włączyć mod_headers można użyć

a2enmod headers 

z Oczywiście po każdej zmianie Apache musisz go zrestartować:

/etc/init.d/apache2 restart 

Następnie można użyć

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

A jeśli mod_headers nie jest aktywny, linia ta nie zrobi nic w ogóle. Możesz spróbować pominąć klauzulę i po prostu dodać Header set Access-Control-Allow-Origin "*" do swojej konfiguracji, wtedy powinien on podać błąd podczas startu, jeśli mod_headers nie jest aktywny.

+2

próbowałem wszystkich opcji, które mogłem znaleźć w Google i, jak powiedziałeś, nikt nie powiedział nic o mod_headers. Podziękować! – Sirkong

+0

Na Arch lub ręcznie pobrane apache użyj 'httpd -M' – SparK

+1

Moje mod_headers są aktywne i dodały tę linię do .htaccess (to samo miejsce jak wspomniano), ale wciąż dostaję ten błąd: Odpowiedź dla preflight ma nieprawidłowy kod stanu HTTP 400 .. Pls sugerują! –

6

W Zend Framework 2.0 miałem ten problem. Może być rozwiązany w dwukierunkowy .htaccess lub php nagłówka i wolą .htaccess więc zmodyfikowany .htaccess od:

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

do

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] 

i zacząć pracować

+0

To uratowało mój dzień, php couddnt, więc zrobił to htaccess. – Relm

6

Dodaj plik .htaccess z następującymi dyrektywami do folderu czcionek, jeśli masz problemy z dostępem do twoich czcionek. Można go łatwo modyfikować do użytku z plikami .css lub .js.

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

Pracowałem dla mnie. Edytowałem ./lib/.htaccess. –

+1

Należy zauważyć, że powyższa dyrektywa '' jest niepotrzebna, _if_, jak zasugerowano powyżej, twój plik '.htaccess' znajduje się w twoim katalogu fontów _and_ twój katalog fontów _only_ zawiera' .eot', .'ttf', '. pliki otf i/lub '.woff'. – Mesagoma

2

BTW: konfiguracja .htaccess musi być wykonana na serwerze, na którym znajduje się interfejs API, a nie na kliencie. Na przykład, tworzymy aplikację AngularJS na domenie x.com i tworzymy interfejs API Rest na Y.com, powinieneś ustawić Access-Control-Allow-Origin "*" w pliku .htaccess w folderze głównym y.com, a nie x .com :)

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

również jako Lukas wspomniano upewnij się, że masz włączony mod_headers jeśli używasz Apache

6

innych odpowiedzi nie działa dla mnie, to jest to, co skończyło się robi trick dla apache2:

1) umożliwienie nagłówki modyfikacji:

sudo a2enmod headers

2) Utwórz plik /etc/apache2/mods-enabled/headers.conf i wstawić:

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

3) Uruchom ponownie serwer:

sudo service apache2 restart

+0

To jedyne rozwiązanie, które działało dla mnie na moim serwerze Ubuntu 16.10. – kneeki

+0

dziękuję, to działało dla mnie! –

+0

To działało również dla mnie. Używam serwera Ubuntu 16.04. Dziękuję Ci. – jhedm