微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React Axios 的 Laravel 8 CORS 问题

如何解决React Axios 的 Laravel 8 CORS 问题

我将我的 API(使用 Laravel 8 框架构建)托管在一个子域中 - webapi.somedomain.com。并且正在运行使用 React Framework 和 Axios 库为 HTTP 请求构建的前端 UI 的本地版本。我在共享托管空间 (cPanel + CentOS) 中托管 我在访问托管 API 时遇到问题。我已经说明了我在下面看到的错误

Access to XMLHttpRequest at 'http://webapi.somedomain.com/api/authorization/signup' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

所以我添加了 Laravel 自定义 CORS 中间件;使用 PHP artisan config:cache 更新文件并清除缓存。没有成功。 找不到任何其他资源。所以我添加了 Laravel CORS 包 - fruitcake/laravel-cors。已经安装、发布并添加到中间件中;更新了文件并清除了缓存。但是在我的 React 项目中访问 API 时,我仍然看到 CORS 错误

config/cors.PHP:

    'paths' => ['api/*'],'allowed_methods' => ['*'],'allowed_origins' => ['*'],'allowed_origins_patterns' => [],'allowed_headers' => ['*'],'exposed_headers' => [],'max_age' => 0,'supports_credentials' => false,

内核.PHP

    protected $middleware = [
        ...
        \Fruitcake\Cors\HandleCors::class,];

我只是 Laravel 的初学者。我究竟做错了什么?有人可以帮我吗?提前致谢。

P.S.:我完全理解 CORS 是什么以及它是如何工作的。我是 Laravel 的新手。对开发并不陌生。我想知道我还应该做什么,以及我是否遗漏了一些东西。

解决方法

问题是由 .htaccess 文件引起的。

在共享托管服务器中,重要的是在 public_html 文件夹中只能访问您项目的公共文件夹,而其他文件夹则隐藏在私有文件夹中。

将您的 index.php 链接到私有的 autoload.php(公共不可访问的地方 - 根文件夹或 public_html 之外的任何文件夹)

将 Laravel 项目添加到共享托管工作区时,重要的是向托管工作区的 public_html 文件夹内的公共文件夹中的 .htaccess 文件添加一些规则。

最后.htaccess 文件应该看起来像这样:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
       Options -MultiViews
   </IfModule>
   Options +FollowSymlinks
   RewriteEngine On

   # Redirect Trailing Slashes...
   RewriteRule ^(.*)/$ /$1 [L,R=301]

   # Handle Front Controller...
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^ index.php [L]
</IfModule>

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

只有在此之后,您才能对 Laravel 路由运行查询。如果不仅 index.php 将被执行并且其他路由将无法识别。

这可能是已知的。但由于我是初学者,我无法弄清楚这一点。添加此作为答案,以防任何其他初学者面临同样的问题。干杯。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。