2

我在我的中使用 307 重定向mod_rewrite规则.htaccess将所有/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");

...

?>

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

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

cors问题

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

在做了一些研究之后,我听说重定向 URL 还必须包含一个Access-Control-Allow-Origin标头,否则浏览器将在尝试跨域请求时停在那里。但是我已经尝试过将这些标题添加到我.htaccess的列表中,但没有成功。

有任何想法吗?

4

1 回答 1

2

谢谢@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 ...。这篇文章解释了两者之间的区别。

于 2018-10-14T01:08:34.843 回答