【问题标题】:PHP - Access-Control-Allow-Origin not workingPHP - 访问控制允许来源不起作用
【发布时间】:2016-11-10 03:52:09
【问题描述】:

我拥有一个我们称之为 www.example.com 的网站。我网站的主要部分位于两个文件中; header.php 和 index.php。网站代码的上半部分在 header.php 中,而下半部分在 index.php 中。我的问题是,我无法让 Access-Control-Allow-Origin 属性显示在 example.com 的响应标头中

我的代码:
以下是header.php的简化版:

<?php
header("Access-Control-Allow-Origin:*", false);
...
additional code here
...
?>
<!DOCTYPE html>
<html>
    <head>
        <title>My Site</title>
    </head>
    <body>
        ....
        top half of site code
        ....

以下是index.php的简化版:

<?php
header("Access-Control-Allow-Origin:*", false);
include ("header.php");
?>
        ....
        bottom half of site code
        ....
   </body>
</html>

这是我检索图像的请求:

$.ajax({
            type: "GET",
            url : folder,
            success: function (data) {
                if($(".img").length){
                    $(".img").remove();
                }

                $(data).find("a").attr("href", function (i, val) {
                    if( val.match(/\.(jpe?g|png|gif)$/) ) {
                        $("#img-lib").append( "<img class='img' src='"+ folder + val +"'>" );
                    }
                });
            },
            error: function () {
                $("#er").remove();
                $("#img-lib").append("<p id='er'>There was an error retrieving the images</p>");
            }
});



我的错误:这是我尝试访问 www.example.com/Section/images/ 时得到的结果:
http://i.stack.imgur.com/29t8n.jpg

我已经尝试过的:
(以下代码sn-ps为第一行php代码)

  • header("Access-Control-Allow-Origin:*"); 仅在 header.php 中。
  • header("Access-Control-Allow-Origin:www.example.com"); 仅在 header.php 中。
  • header("Access-Control-Allow-Origin:*"); 在 header.php 和 index.php 中
  • header("Access-Control-Allow-Origin:*", false); 在 header.php 和 index.php 中


值得一提的是,我当前正在构建的站点将用于编辑我现有的站点 (www.example.com)。

【问题讨论】:

  • 它是否适用于 *?是否强制刷新页面?
  • @DanielKucal 它不适用于 *.我已经刷新了我正在构建的页面和 example.com,但仍然无法正常工作。
  • 我无法重现该问题 — evernote.com/l/AANksxHmPBlG4qXVPoY3b-ZUH4Dz6kXo9Xo — 可能您在标头语句之前有一些其他代码导致抛出错误,可能您在部署中出错了。跨度>
  • “我不确定这是否会有所帮助,但这是我尝试从 images/ 中检索文件时得到的标题” - 该屏幕截图中显示的 URL 显示了来自的标准目录列表阿帕奇。那似乎不是你说你使用的 PHP 程序。
  • @Quentin 上面的评论中没有图片^。我已经重写了我的大部分问题,使其更具体。

标签: javascript php html cors


【解决方案1】:

可能您的静态文件(如图像)无法通过 index.php 访问(您指的是它们的物理位置)。在这种情况下,可以在 HTTP 服务器级别设置 CORS 标头。如果它处理 .htaccess 文件,您可以简单地创建包含以下内容的 .htaccess 文件:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"

在主目录或指定目录中。

【讨论】:

  • https://www.example.com/Section/images/ 看起来不像静态文件的 URL。
  • 您不能排除该选项。在其他情况下,它可以是动态的,但不会通过 index.php 文件。
  • @DanielKucal 昨天忽略了这个答案我觉得很傻,但这成功了。我会推荐一件事,对于其他运行 apache 服务器的人,请按照这篇文章 enable-cors.org/server_apache.html 将 Access-Control-Allow-Origin 属性添加到配置文件中。
猜你喜欢
  • 2015-02-17
  • 2012-03-16
  • 1970-01-01
  • 2016-04-04
  • 2012-04-27
  • 2019-12-12
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
相关资源
最近更新 更多