htaccess Access-Control-Allow-Origin

Tzo*_*Noy 117 .htaccess cross-domain cors

我正在创建一个在其他网站上外部加载的脚本.它加载CSS和HTML,并在我自己的服务器上正常工作.

但是,当我在另一个网站上尝试它时,它会显示这个可怕的错误:

Access-Control-Allow-Origin
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到它完美加载: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>
Run Code Online (Sandbox Code Playgroud)

或者像这样:

Header set Access-Control-Allow-Origin *
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.

小智 233

在外部根文件夹的.htaccess中尝试此操作:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

如果它只涉及.js脚本,你应该在上面包含上面的代码:

<FilesMatch "\.(js)$">
...
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

  • 关于使用`FilesMatch`的好建议. (4认同)
  • 如果它不起作用,您应该尝试启用 `headers` 模块:`a2enmod headers` (4认同)
  • @shenkwen`*`允许任何源域访问此资源.它不是资源列表,而是引用域列表. (3认同)
  • 如果我们通过添加 filesmatch 块来匹配文件,那么 `*` 有什么作用? (2认同)

Luk*_*kas 48

没有人说你还必须启用mod_headers,所以如果仍然无法正常工作,请尝试以下方法:

(以下提示适用于Ubuntu,不了解其他发行版)

你可以检查加载的模块列表

apache2ctl -M
Run Code Online (Sandbox Code Playgroud)

启用mod_headers你可以使用

a2enmod headers
Run Code Online (Sandbox Code Playgroud)

当然,在Apache发生任何变化之后你必须重新启动它:

/etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

如果mod_headers未激活,则此行将不执行任何操作.您可以尝试跳过if子句,只需添加Header set Access-Control-Allow-Origin "*"配置,如果mod_headers未激活,它应该在启动时抛出错误.

  • 一直在尝试我可以在Google上找到的所有选项,正如你所说,没有人说过mod_headers.谢谢! (2认同)
  • 我的 mod_headers 处于活动状态,并在 .htaccess 中添加了这一行(与上述相同的位置),但仍然收到此错误:预检响应具有无效的 HTTP 状态代码 400..请建议! (2认同)
  • mod_headers 是缺少的东西!这与 .htaccess 规则完美配合。谢谢。 (2认同)

vkn*_*yvz 29

根据我的经验;

如果它不起作用php,.htaccess那么它对我有用

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
Run Code Online (Sandbox Code Playgroud)
  • 凭据可以是true或false,具体取决于您的ajax请求参数


Tho*_*man 11

.htaccess如果访问字体时出现问题,请将包含以下指令的文件添加到fonts文件夹中.可以轻松修改以与.css.js文件一起使用.

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


Sam*_*igh 9

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

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

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


小智 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]
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

它开始起作用了


son*_*olo 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>
Run Code Online (Sandbox Code Playgroud)

3)重启服务器:

sudo service apache2 restart