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
C'est ma route
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.
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
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
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
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/*'
];
}
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
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.
n'oubliez pas, l'URL est sensible à la casse du nom du dossier
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
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.
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
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');