htaccess 액세스 제어 허용 원본


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.
Nate

1
filesmatch 블록을 추가하여 파일을 일치 시키면 *어떻게해야합니까?
shenkwen 2016 년

이 작업을 수행 한 후 서버를 다시 시작해야합니까? 위의 코드를 적용했지만 여전히 \ .json에 액세스 할 수 없도록 변경 js했습니다 json.
shenkwen 2016 년

3
@shenkwen *모든 오리진 도메인이이 리소스에 액세스 할 수 있도록합니다. 리소스 목록이 아니라 참조 도메인 목록입니다.
SparK

3
작동하지 않는 경우 headers모듈을 활성화해야 합니다.a2enmod headers
Joaquín O

53

아무도 mod_headers를 활성화 해야한다고 말하지 않으므로 여전히 작동하지 않으면 다음을 시도하십시오.

(다음 팁은 우분투에서 작동하며 다른 배포판에 대해서는 모른다)

당신은로드 모듈의 목록을 확인할 수 있습니다

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가 활성화되어 있지 않으면이 줄은 아무 것도하지 않습니다. if 절을 건너 뛰고 Header set Access-Control-Allow-Origin "*"구성에 추가 하면 mod_headers가 활성화되지 않은 경우 시작 중에 오류가 발생합니다.


3
Google에서 찾을 수있는 모든 옵션을 시도했지만 mod_headers에 대해 아무도 말하지 않았습니다. 감사!
Sirkong

1
내 mod_headers가 활성 상태이며 .htaccess (이 언급 된 것과 같은 장소) 에이 줄을 추가했지만 여전히이 오류가 발생합니다. 프리 플라이트에 대한 응답에 잘못된 HTTP 상태 코드 400이 있습니다.
Sushivam

1
mod_headers가 빠졌습니다! 이것은 .htaccess 규칙과 완벽하게 작동합니다. 감사합니다.
Andy

@SachinS 400 오류를 찾을 수 없습니다. 500은 서버 오류입니다. 거기서 시작하십시오.
Andy

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 요청 매개 변수에 따라 true 또는 false가 될 수 있습니다

이것은 나를 위해 작동하지 않았지만 같은 원리로 PHP에서 작동시킬 수있었습니다.
RevNoah

16

.htaccess글꼴에 액세스하는 데 문제가있는 경우 다음 지시문이 있는 파일을 글꼴 폴더에 추가하십시오 . .css 또는 .js 파일 과 함께 사용하도록 쉽게 수정할 수 있습니다 .

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

1
위에서 제안한 것처럼 파일이 fonts 디렉토리에 있고 fonts 디렉토리 에 , 포함되어 있으면 위의 <FilesMatch>지시문은 필요하지 않습니다. , 및 / 또는 파일입니다. .htaccess.eotttf.otf.woff
Mesagoma

9

다른 답변은 저에게 효과가 없었습니다.

1) 헤더 모드를 활성화하십시오 :

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


이것은 우분투 16.10 서버에서 나를 위해 일한 유일한 솔루션입니다.
kneeki September

이것은 또한 나를 위해 일했습니다. Ubuntu 16.04 서버를 사용하고 있습니다. 감사합니다.
jhedm

우분투 18.04에서 나를 위해 일했습니다. Firefox 70.0.1은 Access-Control-Allow-Origin 헤더에만 만족하지 못했고 Access-Control-Allow-Methods도 추가해야했습니다.
borizzzzz

@songololo Centos 7에서 아파치 파일을 찾을 수 없습니다. 나는 / etc / httpd 디렉토리의 모든 곳을 보았습니다. Centos에서 어떻게 구현할 수 있는지 알려주시겠습니까?
Mainuddin

@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 2016 년

4

BTW : .htaccess 구성은 API를 호스팅하는 서버에서 수행해야합니다. 예를 들어 x.com 도메인에서 AngularJS 앱을 만들고 y.com에서 Rest API를 만들려면 x가 아닌 y.com의 루트 폴더에있는 .htaccess 파일에서 Access-Control-Allow-Origin "*"을 설정해야합니다. .com :)

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

또한 Lukas가 언급했듯이 Apache를 사용하는 경우 mod_headers를 활성화했는지 확인하십시오



0

호스트가 pvn에 있지 않거나 전용이 아닌 경우 서버를 다시 시작하기가 어렵습니다.

나에게서 더 나은 해결책은 글꼴 eot, woff 등을 호출하는 CSS 파일 (다른 도메인 또는 하위 도메인)을 원본 (사용자 도메인 또는 www yourdomain)으로 편집하십시오. 문제를 해결할 것입니다.

CSS의 상대 URL을 절대 URL 원본 도메인으로 편집하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.