在 .htaccess 中启用 cors

2022-08-30 07:59:59

我已经使用SLIM PHP框架创建了一个基本的RESTful服务,现在我正在尝试将其连接起来,以便我可以从Angular.js项目访问该服务。我已经读到Angular开箱即用地支持CORS,我需要做的就是添加这行:到我的.htaccess文件中。Header set Access-Control-Allow-Origin "*"

我已经这样做了,我的REST应用程序仍在工作(没有来自错误的.htaccess的500内部服务器错误),但是当我尝试从 test-cors.org 测试它时,它会引发错误。

Fired XHR event: loadstart
Fired XHR event: readystatechange
Fired XHR event: error

XHR status: 0
XHR status text: 
Fired XHR event: loadend

我的 .htaccess 文件如下所示

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [QSA,L]
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"

我还需要向 .htaccess 中添加其他内容才能使其正常工作,还是有其他方法可以在服务器上启用 CORS?


答案 1

由于我将所有内容都转发到索引.php因此我认为我会尝试在PHP中设置标头而不是.htaccess文件,并且它起作用了!耶!以下是我添加到索引中的内容.php对于其他遇到此问题的人。

// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
    // should do a check here to match $_SERVER['HTTP_ORIGIN'] to a
    // whitelist of safe domains
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");         

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

}

功劳归于slashingweapon对这个问题的回答

因为我使用的是 Slim,所以我添加了此路由,以便 OPTIONS 请求获得 HTTP 200 响应

// return HTTP 200 for HTTP OPTIONS requests
$app->map('/:x+', function($x) {
    http_response_code(200);
})->via('OPTIONS');

答案 2

难道不应该用代替吗?.htaccessaddset

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

推荐