我正在创建一个在其他网站上外部加载的脚本。它加载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 *
但它仍然不起作用。
答案 0 :(得分:216)
在外部根文件夹的.htaccess中尝试:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
如果它只涉及.js脚本,你应该在上面包含上面的代码:
<FilesMatch "\.(js)$">
...
</FilesMatch>
答案 1 :(得分:43)
没有人说您还必须启用 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未激活,它应该在启动时抛出错误。
答案 2 :(得分:26)
根据我的经验;
如果它在php
内不起作用,请在.htaccess
中为我工作
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin http://www.vknyvz.com
Header set Access-Control-Allow-Credentials true
</IfModule>
答案 3 :(得分:10)
如果访问字体时出现问题,请将带有以下指令的.htaccess
文件添加到fonts文件夹中。可以轻松修改,以便与 .css 或 .js 文件一起使用。
<FilesMatch "\.(eot|ttf|otf|woff)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
答案 4 :(得分:7)
在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]
它开始工作
答案 5 :(得分:6)
其他答案对我来说没有用,这就是为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
答案 6 :(得分:4)
BTW:.htaccess配置必须在托管API的服务器上完成。例如,您在x.com域上创建AngularJS应用程序并在y.com上创建Rest API,您应该设置Access-Control-Allow-Origin&#34; *&#34;在y.com的根文件夹上的.htaccess文件而不是x.com:)
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
另外正如Lukas所提到的那样,如果你使用Apache
,请确保你已经启用了mod_headers答案 7 :(得分:1)
确保您没有重定向。如果您不在URL中包含尾部斜杠,则会发生这种情况。
有关详细信息,请参阅此答案 - https://stackoverflow.com/a/27872891/614524
答案 8 :(得分:0)
如果主机不在pvn或专用主机上,则很难重新启动服务器。
从我这里得到更好的解决方案,只需编辑您的CSS文件(在另一个域或您的子域),即可将字体eot,woff等调用到您的来源(您的域或www yourdomain)。它会解决您的问题。
我的意思是,将CSS上的相对URL编辑为绝对URL起源域