web-dev-qa-db-fra.com

Laravel 4 Tous les itinéraires sauf le domicile entraînent une erreur 404

J'ai installé Laravel 4 à l'aide de Composer et j'ai également configuré un hôte virtuel. Actuellement, seule la route racine fonctionne:

<?php

Route::get('/', function()
{
    return View::make('hello');
});

Ce n'est pas:

Route::get('/hello', function()
{
    return View::make('hello');
});

Ce que j'essaie de frapper, c'est TasksController à /tasks:

Route::resource('tasks', 'TasksController');

Cela me donne 404 erreur aussi. Que pourrais-je faire de mal? J'ai un fichier .htaccess par défaut à la racine de mon projet:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

J'utilise localhost sur un Mac.

54
Amit Erandole

Juste pour rire, voir si /index.php/hello fonctionne.

Si tel est le cas, il s'agit probablement d'un problème .htaccess.

101
GaryJ

Avait le même problème en cours d'exécution Laravel 4 sur WAMP (Windows 8).
La solution qui a fonctionné pour moi était la suivante:

  1. Ouvrez Apache httpd.conf et trouvez cette ligne:

    #LoadModule rewrite_module modules/mod_rewrite.so
    
  2. Décommentez cette ligne (supprimez le #)
  3. Enregistrer httpd.conf
  4. Redémarrer WAMP

Cela devrait fonctionner!

38
Rutger

J'ai eu le même problème et la solution était d'activer le mod de réécriture sur Apache2

Dans un terminal, utilisez les commandes suivantes:

$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart

Et magique! 

27
manujas

Avait exactement le même problème.

Deux choses que je devais faire pour résoudre ce problème:

  1. enable rewrite_module dans Apache 
  2. Remplacez l'exemple AllowOverride de None par All , (Apache 2.4.9):

    Options Index FollowSymLinks MultiViews AllowOverride All Exiger tout accordé

Pour votre information: Utilisez Laravel Homestead avec VirtualBox et Vagrant au lieu de WAMP. Il contient Nginx au lieu d’Apache mais tout fonctionne par défaut, car il est explicitement configuré pour Laravel. 

13
Orhan

Même après avoir activé mod_rewrite, vous pouvez être confronté à ce problème si vous aliasez votre dossier laravel/public.

Ajouter 

RewriteBase /your_Apache_alias

à .htaccess fait le tour.

9
MartinGomez

Vous n'avez pas besoin de/pour définir autre chose que chez vous:

Route::get('hello', function()
{
    return View::make('hello');
});

Devrait marcher.

6
davzie

Etant donné que Laravel 4 charge automatiquement les fichiers d’une carte dans un fichier statique, vous devez mettre à jour ce fichier lorsque vous ajoutez un nouveau contrôleur. Exécutez cette commande pour reconstruire le fichier statique:

php composer.phar dump-autoload
4
Niklas Modess

POUR LES UTILISATEURS UBUNTU - testé pour Ubuntu 18.04

1- Activer la réécriture de mod

Sudo a2enmod rewrite

2- Modifier AllowOverride dans le fichier de configuration Apache:

Sudo nano /etc/Apache2/Apache2.conf

Remplacez AllowOverride de None par All dans ce bloc

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3- Redémarrer Apache

Sudo service Apache2 restart
4
BassMHL

Il est assez clair que le problème apparaît à cause du "mod_rewrite", dans certains cas, il suffit d'activer ce module dans Apache pour le réparer.

Cependant, dans mon cas, j'ai dû étendre la configuration pour le VirtualHost de la manière suivante:

<VirtualHost *:80>

    ServerName adplus.local

    ServerAdmin [email protected]
    DocumentRoot /var/www/adplus.local/project/public

    **<Directory "/var/www/adplus.local/project/public">
        AllowOverride All
    </Directory>**

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
3
Donchenko Sergey

J'ai essayé tout cela sans succès, puis j'ai trouvé un autre poste et modifié mon .htaccess en ceci:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
3
Dylan Glockler

J'ai eu ce problème (sous Windows avec Apache 2.2 manuellement installé) et la cause était une variable AllowOverride manquante dans mon hôte virtuel, car le répertoire racine dans httpd.conf était défini sur Aucune.

FileInfo Options=MultiViews est l'ensemble minimal dont vous avez besoin pour le .htaccess de Laravel

par exemple. 

<VirtualHost *:80>
    DocumentRoot "C:/htdocs/domain.com/laravel/public"
    ServerName foo.domain.com

    <Directory "C:/htdocs/domain.com/laravel/public">
        AllowOverride FileInfo Options=MultiViews
    </Directory>
</VirtualHost>

Ou utilisez AllowOverride All si cela ne fonctionne pas et que vous ne vous souciez pas de la sécurité.

3
scipilot

Il y avait un petit défaut dans une réponse précédente ... Cela pourrait aider.

$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart

J'espère que c'est le cas.

3
Caleb Mbakwe

C'est comme @GaryJ & @MartinGomez a dit. Voici le contenu de .htaccess qui doit être défini dans le dossier public pour tous vos projets laravel 4 exécutés sur le serveur Apache:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteBase /

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

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

Aller à 

nano/etc/nginx/sites-available/yoursite

trouvez try_file et remplacez comme ci-dessous:

try_files $uri $uri/ /index.php?$query_string;

2
Murali Krishna

J'ai eu un problème similaire sur Ubuntu 14.04 avec Lumen 5.4.

La solution était double pour moi. D'abord dans mon fichier vhost /etc/Apache2/sites-enabled/my_vhost.conf, j'ai dû ajouter l'entrée <Directory> suivante pour permettre les remplacements, après avoir déclaré ma DocumentRoot:

    DocumentRoot /var/www/path/to/my/app/public

    <Directory "/var/www/path/to/my/app/public">
            Options FollowSymLinks
            AllowOverride All

            Order allow,deny
            Allow from all
    </Directory>

Ensuite, je devais activer les réécritures avec:

Sudo a2enmod rewrite
Sudo service Apache2 restart
1
Kimberly W

Pour les utilisateurs Nginx, vous avez probablement copié le default virtualhost - mais Laravel nécessite une personnalisation de la directive location pour permettre à l'application Laravel d'effectuer le routage et non à Nginx.

Dans votre /etc/nginx/sites-available/your-site-name, remplacez la directive location par ceci:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

Exécutez ensuite Sudo service nginx reload pour que les modifications entrent en vigueur. 

1
Dylan Pierce

Ce commentaire est peut-être un peu tard, mais cela peut aider. J'ai eu le même problème lors du routage vers une autre vue comme celle-ci:

Route::get('index', function () {
return view('index');
});

Route::get('login', function () {
return view('login');
});

Mais cela n’a pas fonctionné, j’ai donc essayé tout ce que j’avais trouvé dans tous les articles, mais cela ne suffisait pas pour résoudre mon problème;

<Files ".ht*">
Require all denied
</Files>

J'ai donc remplacé "nié" par "accordé" et commenté cette ligne sur mon .htaccess:

#RewriteBase /

Et travaillé !! Je pense que ces lignes empêchent Apache de prendre en compte le fichier .htaccess de votre projet, il est donc essentiel de l’adopter. Cela espère pouvoir aider une personne ayant le même problème.

Travailler sur Apache Server 2 @ Manjaro Linux (basé sur Archlinux)

0
Luis Torres

Cette mise à jour a fonctionné pour moi. Dans le fichier .htaccess, ajoutez simplement ce qui suit après l’activation des Rewriterules.

Options -Indexes
Options +FollowSymLinks

A travaillé comme un charme

0
creationproject