89 votes

Mes routes renvoient un 404, comment puis-je les réparer ?

Je viens de commencer à apprendre le framework Laravel et j'ai un problème avec le routage.

La seule route qui fonctionne est la route d'accueil par défaut qui est attachée à Laravel par défaut.

J'utilise WAMP sous Windows, PHP 5.4.3 et Apache 2.2.22. J'ai également activé mod_rewrite et j'ai supprimé le fichier 'index.php' du fichier de configuration application.php pour laisser une chaîne vide.

J'ai créé un nouveau contrôleur appelé Utilisateur :

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

J'ai créé un fichier de vue dans application/views/user/ appelé index.php avec un code HTML de base, et dans routes.php j'ai ajouté ce qui suit :

Route::get('/', function () {
    return View::make('home.index');
});

Route::get('user', function () {
    return View::make('user.index');
});

La première route fonctionne bien lorsqu'on visite la racine ( http://localhost/mysite/public ) dans mon navigateur web, mais lorsque j'essaie d'accéder à ma seconde route avec http://localhost/mysite/public/user Je reçois une erreur 404 Not Found. Pourquoi cela se produit-il ?

140voto

Andrew Vickers Points 1748

Sur mon installation Ubuntu LAMP, j'ai résolu ce problème avec les 2 changements suivants.

  1. Activez mod_rewrite sur le serveur apache : sudo a2enmod rewrite .
  2. Modifier /etc/apache2/apache2.conf en modifiant la directive "AllowOverride" pour le répertoire /var/www (qui est le répertoire racine de mon document principal) : AllowOverride All

Puis redémarrez le serveur Apache : service apache2 restart

63voto

muvera Points 276

Utilisation de WAMP cliquez sur wamp icon -> apache -> apache modules -> scroll et vérifier rewrite_module .

Redémarrer un module de charge rewrite_module

Note : l'application serveur redémarre automatiquement pour vous une fois que vous avez activé "rewrite_module".

37voto

user1930566 Points 81

Avez-vous essayé de vérifier si

http://localhost/mysite/public/index.php/user 

travaillait ? Si c'est le cas, assurez-vous que tous les dossiers de votre chemin d'accès ne contiennent pas de lettres majuscules. J'ai eu la même situation et la conversion des lettres en minuscules m'a aidé.

25voto

PapaSmurf Points 582

Avez-vous essayé d'ajouter ceci à votre fichier routes à la place ? Route::get('user', "user@index") ?

Le morceau de texte qui précède le @ , user dans ce cas, dirigera la page vers le contrôleur de l'utilisateur et le morceau de texte qui suit l'indicateur @ , index dirigera le script vers le fichier user fonction public function get_index() .

Je vois que vous utilisez $restful Dans ce cas, vous pouvez définir votre Route a Route::any('user', 'user@index') . Cela permettra de gérer à la fois POST y GET au lieu de les écrire séparément.

9voto

Simon Points 4467

J'avais le même problème en utilisant EasyPHP. J'ai découvert que je devais spécifier AllowOverride All dans mon <Directory> bloc en httpd.conf . Sans cela, Apache ignore parfois votre .htaccess .

Le mien a fini par ressembler à ça...

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X