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

Php 如何绕过307重定向上的CORS错误,php,.htaccess,cors,http-status-code-307,Php,.htaccess,Cors,Http Status Code 307,我在.htaccess中使用307重定向mod_rewrite规则将所有/api/…请求重定向到apidhandler.php,我在CORS上遇到了问题 我的.htaccess RewriteEngine On RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307] MyapiHandler.php <?php header("Access-Control-Allow-Origin: http://localhost:4200"); head

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

我的
.htaccess

RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]
My
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");

...

?>

但是我在我的
apichandler.php
中特别有这个头,所以我不知道问题出在哪里

在做了一点研究之后,我听说重定向URL还必须包含一个
访问控制允许来源
标题,否则浏览器将停止尝试跨域请求。但我已经尝试过将这些标题添加到我的
.htaccess
,但没有成功

有什么想法吗?

谢谢!我的问题的解决方案是从我的
apichandler.php
中删除标题,然后将它们添加到我的
.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]

请注意使用
标题始终设置…
而不是
标题设置…
。这解释了两者之间的区别。

确保您还将Access Control Allow Origin response标头添加到
/api/students/1/courses
路由的响应中。在浏览器devtools中检查响应,确认响应中有标题。
/api/students/1/courses
不是真正的端点。我想重定向到
apidhandler.php
来解析REST api url,这样我就可以路由到正确的REST名词。@sideshowbarker,因为它不是一个真正的端点,所以如果有意义的话,我无法向它添加头。是的,我现在明白了。那么您是否尝试过在.htaccess中添加标题?如果可以,请尝试添加.htaccess:
标题始终设置访问控制允许源”http://localhost:4200“\n标头始终将访问控制允许凭据设置为“真”\n标头始终将访问控制允许标头设置为“内容类型”
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]