htaccess Access-Control-Allow-Origin


134

Я створюю сценарій, який завантажується зовні на інші сайти. Він завантажує CSS та HTML і чудово працює на моїх власних серверах.

Однак, коли я спробую його на іншому веб-сайті, він відображає цю жахливу помилку:

Access-Control-Allow-Origin

Тут ви можете чудово завантажуватись: http://tzook.info/bot/

Але на цьому іншому веб-сайті видно помилка: http://cantloseweight.co/robot/

Я завантажив сценарій завантаження в jsfiddle: http://jsfiddle.net/TL5LK/

Я спробував редагувати файл htaccess таким чином:

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

Або так:

Header set Access-Control-Allow-Origin *

Але це все ще не працює.

Відповіді:


270

Спробуйте це в .htaccess зовнішньої кореневої папки:

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

А якщо це стосується лише сценаріїв .js, слід загорнути вищевказаний код всередині цього:

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

6
Чудова порада щодо використання FilesMatch.
Нейт

1
якщо ми узгоджуємо файли, додаючи блок файлу матчу, то що *робити?
shenkwen

І чи потрібно перезавантажувати сервер після цього? Я застосовую код вище, але він все ще не дозволяє мені отримати доступ до \ .json, я змінив jsна json.
shenkwen

3
@shenkwen *Дозволяє будь-якому вихідному домену отримати доступ до цього ресурсу. Це не список ресурсів, а перелік посилань на домени.
SparK

3
Якщо це не працює, спробуйте увімкнути headersмодуль:a2enmod headers
Joaquín O

53

ніхто не каже, що у вас також повинні бути включені mod_headers , тому якщо все ще не працює, спробуйте це:

(наступні поради працюють щодо Ubuntu, не знаю про інші дистрибутиви)

ви можете перевірити список завантажених модулів за допомогою

apache2ctl -M

щоб увімкнути mod_headers, який ви можете використовувати

a2enmod headers

звичайно після будь-яких змін в Apache вам доведеться перезапустити його:

/etc/init.d/apache2 restart

Тоді можна використовувати

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

І якщо mod_headers не активний, цей рядок взагалі нічого не зробить. Ви можете спробувати пропустити, якщо пункт і просто додати його Header set Access-Control-Allow-Origin "*"у ваш конфігурацію, то він повинен видавати помилку під час запуску, якщо mod_headers не активний.


3
намагаюся всі варіанти, які я міг знайти в Google, і, як ви сказали, ніхто не сказав нічого про mod_headers. Спасибі!
Сірконг

1
Мої mod_headers активні і додали цей рядок у .htaccess (те саме місце, що й згадувалось), але все одно отримую цю помилку: Відповідь на передполіт має недійсний код статусу HTTP 400..Прикладайте!
Сушівам

1
mod_headers була браком! Це чудово працює з правилом .htaccess. Дякую.
Енді

@SachinS помилка 400 не знайдена, 500 - помилка сервера. Почніть з цього.
Енді

30

з мого досвіду;

якщо це не працює зсередини, phpзробіть це в .htaccessмені, воно працювало на мене

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • Повноважні дані можуть бути правдивими або хибними, залежно від ваших параметрів запиту ajax

Це не працювало для мене, але мені вдалося змусити його працювати в php, за тим же принципом.
RevNoah

16

Додайте .htaccessфайл із наведеними нижче директивами до папки шрифтів, якщо виникли проблеми з доступом до ваших шрифтів. Легко можна змінити для використання з .css або .js файлами.

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

1
Слід зазначити , що наведене вище <FilesMatch>вказівка НЕ є необхідним, якщо , як уже говорилося вище, ваш .htaccessфайл знаходиться в папці шрифтів і ваш каталог шрифтів тільки містить .eot,. ttf, .otfІ / або .woffфайли.
Месагома

9

Інші відповіді не спрацювали для мене, ось що, нарешті, зробило трюк для apache2:

1) Увімкніть заголовки mod:

sudo a2enmod headers

2) Створіть /etc/apache2/mods-enabled/headers.confфайл і вставте:

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

3) Перезавантажте ваш сервер:

sudo service apache2 restart


Це єдине рішення, яке працювало для мене на моєму сервері Ubuntu 16.10.
колінки

Це працювало і для мене. Я використовую сервер Ubuntu 16.04. Дякую.
jhedm

Працював для мене на Ubuntu 18.04. Firefox 70.0.1 не був задоволений лише заголовком Access-Control-Allow-Origin, і мені довелося додати і Методи Access-Control-Allow-Method.
borizzzzz

@songololo Я не зміг знайти цей файл для apache в Centos 7. Я шукав всюди каталог / etc / httpd. Чи можете ви, будь ласка, повідомити мені, як я можу це реалізувати на Centos?
Майнюддін

@Mainuddin, вибач, я не знайомий з Centos. Сподіваємось, хтось інший може
задзвонити

7

У Zend Framework 2.0 у мене була така проблема. Можна вирішити двома способами .htaccess або php заголовком, я віддаю перевагу .htaccess, так що я змінив .htaccess з:

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

до

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]

і воно починає працювати


Це врятувало мій день, php couddnt роботу, тому htaccess зробив це.
Relm

4

BTW: конфігурація .htaccess повинна бути виконана на сервері, на якому розміщено API. Наприклад, ви створюєте додаток AngularJS у домені x.com та створюєте API відпочинку на y.com, слід встановити Access-Control-Allow-Origin "*" у файлі .htaccess у кореневій папці y.com not x .com :)

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

Також Лукас згадував, що ви активували mod_headers, якщо використовуєте Apache


1

Переконайтеся, що у вас немає перенаправлення. Це може статися, якщо ви не включите прострочку в URL-адресу.

Дивіться цю відповідь для більш детальної інформації - https://stackoverflow.com/a/27872891/614524


0

Якщо ваш хост не знаходиться в pvn або виділений, важко перезапустити сервер.

Краще рішення від мене, просто відредагуйте свій CSS-файл (на іншому домені чи піддомені), який викликає шрифт eot, woff тощо до вашого походження (ваш домен або www yourdomain). це вирішить вашу проблему.

Я маю на увазі відредагувати відносний URL на css до абсолютного домену URL-адреси

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.