【发布时间】:2019-03-18 15:55:33
【问题描述】:
我在 .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");
...
?>
每当我在前端发出 api 请求时,都会收到 CORS 错误,
"...has been blocked by CORS policy: No 'Access-Control-Allow-Origin` header is present on the request resource."
但我的 apiHandler.php 中专门有那个标题,所以我不知道问题是什么。
经过一番研究,我听说重定向 URL 还必须包含 Access-Control-Allow-Origin 标头,否则浏览器将在尝试跨域请求时停在那里。但是我已经尝试过将这些标题添加到我的.htaccess 中,但没有成功。
有什么想法吗?
【问题讨论】:
-
确保您还将 Access-Control-Allow-Origin 响应标头添加到
/api/students/1/courses路由的响应中。检查浏览器 devtools 中的响应以确认响应中的标头。 -
/api/students/1/courses不是真正的端点。我想重定向到apiHandler.php以剖析 REST api url,以便我可以路由到正确的 REST 名词。 -
@sideshowbarker 所以因为它不是一个真正的端点,我无法向它添加标题,如果这有任何意义的话。
-
是的,我现在明白了。那么您是否尝试在我们的 .htaccess 中添加标题?如果可以,请尝试添加您的 .htaccess:
header always set Access-Control-Allow-Origin "http://localhost:4200"\n header always set Access-Control-Allow-Credentials "true"\n header always set Access-Control-Allow-Headers "Content-Type"。
标签: php .htaccess cors http-status-code-307