【问题标题】:How to get around CORS error on a 307 redirect如何解决 307 重定向上的 CORS 错误
【发布时间】: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


【解决方案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 解释了两者的区别。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2023-01-02
    • 2021-05-30
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2021-05-28
    • 2017-05-22
    相关资源
    最近更新 更多