在 .htaccess 中启用 cors

新手上路,请多包涵

我已经使用 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?

原文由 Devin Crossman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 658
2 个回答

因为无论如何我都将所有内容转发到 index.php,所以我想我会尝试在 PHP 中设置标头而不是 .htaccess 文件,它确实有效!耶!这是我为遇到此问题的其他人添加到 index.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');

原文由 Devin Crossman 发布,翻译遵循 CC BY-SA 4.0 许可协议

将 100% 工作,在 .htaccess 中应用:

 # Enable cross domain access control
SetEnvIf Origin "^http(s)?://(.+\.)?(1xyz\.com|2xyz\.com)$" REQUEST_ORIGIN=$0
Header always set Access-Control-Allow-Origin %{REQUEST_ORIGIN}e env=REQUEST_ORIGIN
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "x-test-header, Origin, X-Requested-With, Content-Type, Accept"

# Force to request 200 for options
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]

原文由 levin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题