如何绕过 307 重定向的 CORS 错误

How to get around CORS error on a 307 redirect

我在 .htaccess 中使用 307 重定向 mod_rewrite 规则将所有 /api/... 请求重定向到 apiHandler.php,但我在使用 CORS 时遇到问题.

我的.htaccess

RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]

我的apiHandler.php

<?php

header("Access-Control-Allow-Origin: http://localhost:4200");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type");
header("Content-Type: application/json");

...

?>

每当我在 front-end 中发出 api 请求时,我都会收到 CORS 错误,

"...has been blocked by CORS policy: No 'Access-Control-Allow-Origin` header is present on the request resource."

但我的 apiHandler.php 中专门有那个 header,所以我不知道问题出在哪里。

经过一些研究,我听说重定向 URL 还必须包含一个 Access-Control-Allow-Origin header,否则浏览器将在那里停止尝试 cross-domain 请求。但我已经尝试过将这些 header 添加到我的 .htaccess 中,但没有成功。

有什么想法吗?

谢谢@sideshowbarker!我的问题的解决方案是从我的 apiHandler.php 中删除 headers 并将它们添加到我的 .htaccess.

Header always set Access-Control-Allow-Origin "http://localhost:4200"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Headers "Content-Type"
Header always set Content-Type "application/json"

RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]

请注意使用 Header always set ... 而不是 Header set ...。这个post解释了两者的区别