.htaccess中的头设置Access-Control-Allow-Origin不起作用

use*_*592 87 .htaccess mod-rewrite rewrite cors

我无法弄清楚为什么我的.htaccess标题设置不起作用.

我的.htaccess文件内容:

Header set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "*"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)

但是当我删除Header并添加它们时,index.php一切正常.

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

imb*_*izi 130

这应该工作:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记激活apache模块头文件`a2enmod headers` (45认同)
  • 此外,在这种情况下最好使用`Header set`.如果代码被更改并且它设置了标题,那么让Apache执行`header add`将发送双**标题.这将打破像Restangular这样的客户端. (6认同)
  • 如果需要,请不要忘记`Header add Access-Control-Allow-Credentials"true"` (2认同)

Mir*_*iro 19

只是为了记录,我遇到了完全相同的问题,没有一个答案奏效.

我使用了一个头文件检查工具:http://www.webconfs.com/http-header-check.php

我正在测试我的IP(http://192.0.2.1/upload),回来的是以下内容:

HTTP/1.1 301 Moved Permanently => 
Date => Sat, 10 Jan 2015 04:03:35 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Location => http://192.0.2.1/upload/
Content-Length => 380
Connection => close
Content-Type => text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)

发生了重定向,并且AJAX请求不遵循/遵循重定向.

事实证明这是域名末尾缺少的斜杠(http://192.0.2.1/upload /)

我在最后用斜线再次测试,我在下面得到了这个.在脚本中也添加了一个斜杠,它现在正在工作.

HTTP/1.1 200 OK => 
Date => Sat, 10 Jan 2015 04:03:53 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By => PHP/5.3.8
Access-Control-Allow-Origin => *
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers => *
Content-Length => 1435
Connection => close
Content-Type => text/html
Run Code Online (Sandbox Code Playgroud)

使用此工具来测试标题是否良好以及对正在发生的事情进行故障排除.

  • 我现在打开11个标签试图解决这个问题.这个答案应该在更多的地方. (4认同)

TAR*_*KUS 10

我在GoDaddy上有一个共享主机.我也需要回答这个问题,在搜索之后我发现它是可能的.

我写了一个.htaccess文件,把它放在与我的操作页面相同的文件夹中.以下是.htaccess文件的内容:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Run Code Online (Sandbox Code Playgroud)

这是我的ajax电话:

    $.ajax({
        url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
        beforeSend: beforeSendHandler,
        success: completeHandler,
        error: errorHandler,
        // Form data
        data: formData,
        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });
Run Code Online (Sandbox Code Playgroud)

请参阅此文章以供参考:

.htaccess中的头设置Access-Control-Allow-Origin不起作用


小智 8

小心:

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

根本不明智地授予每个人访问权限.最好只允许知道可信主机列表......

Header add Access-Control-Allow-Origin "http://aaa.example"
Header add Access-Control-Allow-Origin "http://bbb.example"
Header add Access-Control-Allow-Origin "http://ccc.example"
Run Code Online (Sandbox Code Playgroud)

问候,

  • 这行不通。Access-Control-Allow-Origin不允许使用多个值。您需要根据原始请求标头的值动态设置标头。 (2认同)

小智 7

我激活了Apache模块头a2enmod头,问题已经解决了.


小智 6

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

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

这样做要小心Header add Access-Control-Allow-Origin "*"向每个人授予访问权限是不明智的。我认为你应该使用:

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