J'ai mes API (construites à l'aide de Laravel 8 Framework) hébergées dans un sous-domaine - webapi.somedomain.com. Et j'exécute une version locale de l'interface utilisateur frontale construite à l'aide de React Framework et de la bibliothèque Axios pour les requêtes HTTP. J'ai hébergé dans un espace d'hébergement partagé (cPanel + CentOS) Je suis confronté à un problème en frappant les API hébergées. J'ai indiqué l'erreur que je vois ci-dessous:

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.

J'ai donc ajouté le middleware Laravel Custom CORS; a mis à jour les fichiers et vidé le cache à l'aide de php artisan config:cache. Ça n'a pas marché. Impossible de trouver d'autres ressources. J'ai donc ajouté le package Laravel CORS - fruitcake/laravel-cors. Je l'ai installé, publié et ajouté au middleware; mis à jour le fichier et effacé le cache. Mais je vois toujours l'erreur CORS en accédant aux API de mon projet React

Config / cors.php:

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

Kernel.php:

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

Je ne suis qu'un débutant à Laravel. Qu'est-ce que je fais mal? Est-ce que quelqu'un peut m'aider? Merci d'avance.

P.S .: Je comprends parfaitement ce qu'est CORS et comment cela fonctionne. Je suis nouveau à Laravel. Pas nouveau dans le développement. Je veux savoir ce que je dois faire d'autre et si je laisse quelque chose de côté.

0
Mugundh Muthuvel 28 févr. 2021 à 13:19

1 réponse

Meilleure réponse

Le problème est dû au fichier .htaccess.

Dans un serveur d'hébergement partagé, il est important de n'avoir que le dossier public de votre projet accessible dans le dossier public_html et le reste caché en privé.

Liez votre index.php au autoload.php qui se trouve en privé (endroit public non accessible - dossier racine ou tout dossier en dehors de public_html)

Lors de l'ajout d'un projet Laravel à un espace de travail d'hébergement partagé, il est important d'ajouter quelques règles au fichier .htaccess dans le dossier public qui se trouve dans le dossier public_html de votre espace de travail d'hébergement.

Enfin, le fichier .htaccess devrait ressembler à ceci:

<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]

Ce n'est qu'après cela que vous pourrez exécuter des requêtes sur les routes Laravel. Sinon, seul le index.php sera exécuté et les autres routes ne seront pas reconnues.

Cela pourrait être connu. Mais comme j'étais un débutant, je ne pouvais pas comprendre cela. Ajouter ceci comme réponse au cas où un autre débutant serait confronté au même problème. Acclamations.

1
Mugundh Muthuvel 13 mars 2021 à 03:06