htaccess Access-Control-Allow-Origin

时间:2012-11-16 17:25:36

标签: .htaccess cors cross-domain

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

但它仍然不起作用。

9 个答案:

答案 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>
  • 凭据可以是true或false,具体取决于您的ajax请求参数

答案 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起源域