170

我正在创建一个在其他站点上从外部加载的脚本。它加载 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 *

但它仍然不起作用。

4

9 回答 9

322

在外部根文件夹的 .htaccess 中试试这个:

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

如果它只涉及 .js 脚本,你应该将上面的代码包装在这个里面:

<FilesMatch "\.(js)$">
...
</FilesMatch>
于 2012-12-14T00:40:09.090 回答
64

没有人说您还必须启用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 没有激活,这条线将什么也不做。您可以尝试跳过 if 子句并仅添加Header set Access-Control-Allow-Origin "*"您的配置,然后如果 mod_headers 未激活,它应该在启动期间抛出错误。

于 2013-12-08T11:47:30.747 回答
35

根据我的经验;

如果它不能从内部工作,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 请求参数
于 2013-06-14T14:37:02.057 回答
22

.htaccess如果在访问字体时遇到问题,请将具有以下指令的文件添加到字体文件夹。可以轻松修改以用于.css.js文件。

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>
于 2015-04-07T05:46:52.797 回答
10

在 Zend Framework 2.0 中我遇到了这个问题。可以通过两种方式解决 .htaccess 或 php header 我更喜欢 .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]

它开始工作

于 2014-01-13T05:40:39.163 回答
10

其他答案对我不起作用,这就是最终为 apache2 做的伎俩:

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

于 2016-04-07T08:01:04.833 回答
7

顺便说一句:.htaccess 配置必须在托管 API 的服务器上完成。例如,您在 x.com 域上创建一个 AngularJS 应用程序并在 y.com 上创建一个 Rest API,您应该在 y.com 的根文件夹上的 .htaccess 文件中设置 Access-Control-Allow-Origin "*" 而不是 x .com :)

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

同样正如 Lukas 提到的,如果您使用 Apache,请确保您已启用 mod_headers

于 2016-04-03T22:56:43.447 回答
1

确保您没有发生重定向。如果您未在 URL 中包含尾部斜杠,则可能会发生这种情况。

有关更多详细信息,请参阅此答案– https://stackoverflow.com/a/27872891/614524

于 2016-11-17T19:48:12.323 回答
0

如果您的主机不在 pvn 或专用,则很难重新启动服务器。

我提供了更好的解决方案,只需编辑您的 CSS 文件(在另一个域或您的子域)调用字体 eot、woff 等到您的来源(您的域或 www yourdomain)。它会解决你的问题。

我的意思是,将 css 上的相对 url 编辑为绝对 url 源域

于 2019-09-29T12:10:53.327 回答