web-dev-qa-db-fra.com

404 Introuvable, mais l'itinéraire existe dans Laravel 5.4

J'utilise PhpStorm. Je peux exécuter et ouvrir le index.php, mais lorsque je souhaite appuyer sur le bouton Soumettre (connexion post), son affichage 404 est introuvable.

Serveur Web Apache 2.4 fonctionnant sous Windows 10.

C'est ma maison

index.php

C'est ma route

web.php

19
Melvin Jeconiah

Je ne sais pas exactement pourquoi tous les votes négatifs, d'autant plus que c'est un problème commun et que la cause peut être cachée pour quelqu'un qui est nouveau dans l'environnement Laravel. Je sais que c'est un ancien message , mais je l'ajoute ici pour les futurs débutants.

La première chose que je suggère d'essayer est d'exécuter php artisan route:list depuis la ligne de commande (depuis le répertoire racine de votre projet). Cela répertoriera toutes les routes que Laravel peut enregistrer et s'il y a des erreurs, elles s'afficheront généralement ici.

La deuxième chose que je suggère est de s'assurer que l'URL correspond à l'itinéraire. Je ne peux pas vous dire combien de fois j'ai essayé de comprendre pourquoi mon itinéraire renvoyait un 404 simplement parce que mon formulaire postait quelque chose comme /insertStudent lorsque mon itinéraire a été défini comme /admin/insertStudent

La troisième chose que je suggère est de s'assurer que la méthode que vous appelez existe. Vos méthodes sont-elles vraiment appelées postSignIn et postInsertStudent et pas simplement SignIn et InsertStudent? Gardez à l'esprit que les noms d'URL et de méthode sont sensibles à la casse et doivent correspondre à l'endroit où vous définissez l'itinéraire, l'URL qui est appelée et la méthode qui reçoit la demande.

Enfin, si tout cela est vérifié, une dernière chose que je pourrais vous suggérer d'essayer est d'exécuter php artisan route:clear. Cela réinitialise le cache d'itinéraire.

23
ChronoFish

J'ai eu le même problème et résolu en suivant

J'ai édité le fichier .htaccess

RewriteEngine On
RewriteBase /path/of/project/folder/
# change above to your site i.e.,  RewriteBase /whatever/public/

J'espère que cela fonctionnera pour vous

3
Ram Chander

Assurez-vous d'avoir ajouté l'en-tête Accept correct.

Dans mon cas, j'ai essayé d'accéder aux points de terminaison api et, à chaque fois, la ressource 404 reçue était introuvable. Quand j'ai ajouté Accept: application/json en-tête J'ai reçu une réponse de la route correspondante

3
Anthony Artemiev

C'est une vieille question mais elle est encore active. pour les utilisateurs de Windows si vous utilisez MAJUSCULES caractères (lettre majuscule) dans votre dossier de projet, vous devez les utiliser dans votre navigateur. Si votre projet est en "c:\xampp\htdocs\MyProject\" vous devez utiliser MyProject comme URL au lieu de myproject par exemple dans le projet ci-dessus (MyProject) suivant l'itinéraire:

Route::get('/dashboard', function () {
    return 'welcome to dashboard!';
});

fonctionnera si vous utilisez:

http://MyProject/dashboard

mais il vaut mieux utiliser des caractères minuscules dans les répertoires

2
Hamid

essayer

php artisan route:clear
php artisan route:cache

puis tapez ceci et voyez si votre itinéraire existe dans la liste

php artisan route:list

et également dans Middleware\VerifyCsrfToken.php, les itinéraires de vérification sont autorisés


class VerifyCsrfToken extends Middleware {

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*'
    ];

}

1
Ruhith Udakara

assurez-vous que l'URL transmise est identique sur votre itinéraire. vérifiez les paramètres et l'action dans le formulaire. Pour obtenir une réponse claire, publiez votre MVC

1
Kayal

Mise à jour 202
Il y a beaucoup de cas qui se sont produits ci-dessus, j'ai encore une fois des cas que j'ai rencontrés depuis longtemps mais j'oublie encore et parfois je ne sais pas pourquoi. Il s'agit de certains modèles d'URL identiques, par exemple abc.com/c/{get_an_id} et abc.com/c/get_text. Vous pouvez modifier l'ordre mais seul le premier peut s'exécuter, 404 pour la deuxième URL.

0
May Weather VN

n'oubliez pas, l'URL est sensible à la casse du nom du dossier

0
david valentino

Changer le port du serveur a fonctionné pour moi après avoir essayé plusieurs correctifs en vain. J'exécutais sur loalhost: 3000 et j'ai changé pour localhost: 4000. Je pense que cela pourrait avoir à voir avec un peu de mémoire cahe

0
ogunniran olusola

J'ai eu le même problème récemment et je pensais que j'utilisais un mot réservé, que je ne pouvais pas trouver dans la liste des mots réservés de PHP .

À l'origine, mes Routes/web.php étaient:

Route::post('sysinfo/store',['as'=>'sysinfo.store', 'uses'=>'SysinfoController@store']);

Après avoir changé de nom, comme indiqué ci-dessous, cela a fonctionné!

Route::post('newsysinfo/store',['as'=>'newsysinfo.store',   'uses'=>'SysinfoController@store']);

Ce qui est bizarre, c'est que j'ai d'autres itinéraires de travail tels que:

Route::get('sysinfo/',['as'=>'sysinfo.index',   'uses'=>'SysinfoController@index']);
Route::post('sysinfo/{sysinfo}',['as'=>'sysinfo.update',   'uses'=>'SysinfoController@update']);
Route::get('sysinfo/create',['as'=>'sysinfo.create',   'uses'=>'SysinfoController@create']);
Route::get('sysinfo/{id}/edit',['as'=>'sysinfo.edit',   'uses'=>'SysinfoController@edit']);
Route::get('sysinfo/{sysinfo}/destroy',['as'=>'sysinfo.destroy',   'uses'=>'SysinfoController@destroy']);

Bien que ce ne soit pas une explication des causes du problème, cette solution peut peut-être vous aider.

0
Iago F.

Veuillez vous faire configurer Apache avec les informations suivantes

in /path/to/Apache2/installation/conf/httpd.conf

Ajoutez les informations suivantes

<Directory "path/to/laravel/project/public">
    Allowoverride All
</Directory>

fichier .htaccess situé dans le dossier public assurez-vous qu'il a les éléments suivants

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

N'oubliez pas d'activer le module mod_rewrite

Sudo a2enmod rewrite
0

N'oubliez pas l'ordre de vos itinéraires. Par exemple, si vous souhaitez accéder à /path/second et enregistrez les itinéraires suivants:

Route::get('/path/{dynamic_second}', 'Controller@actionDynamic');

Route::get('/path/{dynamic_second}/{dynamic_third}', 'Controller@third');

Route::get('/path/second', 'Controller@action');

Cela se cassera, car second est consommé par /path/{dynamic_second}.

Si vous souhaitez accéder à /path/second, vous devez répertorier vos itinéraires comme suit:

Route::get('/path/second', 'Controller@action');

Route::get('/path/{dynamic_second}', 'Controller@actionDynamic');

Route::get('/path/{dynamic_second}/{dynamic_third}', 'Controller@third');
0
Luke Madhanga