如何解决307重定向上的CORS错误

时间:2018-10-13 18:38:42

标签: php .htaccess cors http-status-code-307

我在mod_rewrite中使用307重定向.htaccess规则将所有/api/...请求重定向到apiHandler.php,但是在使用CORS时遇到了麻烦。 / p>

我的.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");

...

?>

每当我在前端发出api请求时,都会收到CORS错误,

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

cors issue

但是我特别在apiHandler.php中有该标头,所以我不知道问题是什么。

做了一些研究后,我听说重定向URL还必须包含一个Access-Control-Allow-Origin标头,否则浏览器将停止尝试跨域请求的操作。但是我已经尝试过将这些标头添加到我的.htaccess中,但是没有运气。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

谢谢@sideshowbarker!解决我的问题的方法是从我的apiHandler.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]

注意使用Header always set ...代替Header set ...post解释了两者之间的区别。