laravel 4 toutes les routes sauf home se soldent par une erreur 404

je viens d'essayer laravel 4 que j'ai installé avec composer. Ont mis en place un hébergeur virtuel. Seule la voie root fonctionne:

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

même si cela ne fonctionne pas

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

ce que j'essaie de frapper est un TasksController à /tasks :

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

ça me donne aussi 404.

que pouvais-je faire de mal? j'ai suivi ces instructions installation: http://chris-schmitz.com/getting-started-with-laravel-4 /

J'ai aussi un défaut .fichier htaccess à la racine de mon projet:

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

je suis sur un mac en utilisant localhost.

52
demandé sur Amit Erandole 2012-11-22 18:39:04

18 réponses

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

si oui, alors c'est très probablement un problème .htaccess .

97
répondu GaryJ 2013-12-14 07:17:03

a eu le même problème en exécutant Laravel 4 sur WAMP (Windows 8).

La solution qui a fonctionné pour moi était:

  1. Open apache httpd.conf et trouver cette ligne:

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

Il faut qu'on travaille!

37
répondu Rutger 2013-12-14 07:19:40

j'avais 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!

26
répondu manujas 2016-01-24 01:51:31

avait exactement le même problème.

deux choses que je devais faire pour corriger cela:

  1. activer rewrite_module Apache
  2. changer le AllowOverride de None à All , exemple (Apache 2.4.9):

    Index Des Options Followsymlink MultiViews AllowOverride All Exiger que tous accordée

FYI: 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 configuré explicitement pour Laravel.

13
répondu Orhan 2015-02-12 04:30:27

même après avoir activé mod_rewrite, vous pouvez faire face à ce problème si vous alias votre dossier laravel/public.

ajouter

RewriteBase /your_apache_alias

à .htaccess fait l'affaire.

8
répondu MartinGomez 2013-09-14 02:01:11

Vous n'avez pas besoin d'un / lors de la définition d'autre chose que de la maison:

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

devrait marcher.

6
répondu davzie 2012-11-22 14:45:22

étant donné que Laravel 4 est l'autoloading de fichiers à partir d'une map 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
répondu Niklas Modess 2012-11-24 14:47:14

j'ai eu ce problème (sur Windows avec Apache 2.2 installé manuellement), et la cause était un AllowOverride manquant dans mon VirtualHost comme répertoire racine dans httpd.conf n'était pas par défaut.

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

p.ex.

<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
répondu scipilot 2014-08-02 06:57:10

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

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

<VirtualHost *:80>

    ServerName adplus.local

    ServerAdmin sergey.donchenko@gmail.com
    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
répondu Donchenko Sergey 2015-02-12 04:30:15

j'ai essayé tout cela sans succès, puis j'ai trouvé un autre poste et changé le mien .htaccess:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
3
répondu Dylan Glockler 2015-03-08 06:32:15

c'est comme @GaryJ & @MartinGomez a dit. C'est le contenu du .htaccess qui doit être placé dans le dossier public pour tous vos projets laravel 4 tournant sur le serveur Apache:

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

    RewriteEngine On
    RewriteBase /

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

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
2
répondu Heroselohim 2014-11-13 12:49:06

il y avait un petit défaut dans une réponse précédente. Cela peut vous aider.

$ sudo a2enmod rewrite
$ sudo service apache2 restart

J'espère que oui.

2
répondu Caleb Mbakwe 2015-01-15 14:02:07

passez à

nano / etc/nginx/sites-available /yoursite

trouver try_file et remplacer comme suit:

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

2
répondu Murali Krishna 2016-12-23 15:04:04

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

dans votre /etc/nginx/sites-available/your-site-name remplacer la directive de localisation par ce qui suit:

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

Puis sudo service nginx reload pour que les changements entrent en vigueur.

1
répondu Dylan Pierce 2016-12-21 13:38:18

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

la solution était deux parties pour moi. D'abord dans mon fichier vhost /etc/apache2/sites-enabled/my_vhost.conf , j'ai dû ajouter l'entrée suivante <Directory> pour permettre des dérogations, après avoir déclaré Mon 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, j'ai dû activer les réécritures avec:

sudo a2enmod rewrite
sudo service apache2 restart
1
répondu Kimberly W 2017-08-27 14:51:52

cette mise à jour a fonctionné pour moi. Dans l' .le fichier htaccess ajoute simplement ce qui suit après que les règles de réécriture sont activées.

Options -Indexes
Options +FollowSymLinks

travaillé comme un charme

0
répondu creationproject 2015-01-15 02:08:07

Ce commentaire peut être un peu tard mais ça peut aider. J'ai eu le même problème en routant vers une autre vue comme celle-ci:

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

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

mais ça n'a pas marché alors j'ai essayé tout ce que j'ai trouvé dans tous les billets liés mais ce n'était pas assez pour résoudre mon problème donc j'ai trouvé ces lignes sur le httpd.conf:

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

alors j'ai changé" nié "en" accordé " et j'ai aussi commenté cette ligne sur mon .htaccess:

#RewriteBase /

et travaillé!! Je pense que ces lignes font Qu'Apache ne considère pas le .htaccess fichier de votre projet ainsi le tourner à accordé fait la différence. Espérons que cela puisse aider quelqu'un avec le même problème.

de Travail sur le Serveur Apache 2 @ Manjaro Linux (basé sur Archlinux)

0
répondu Luis Torres 2016-09-13 22:45:55

pour les utilisateurs UBUNTU - Testé Pour Ubuntu 18.04

1-active mod rewrite

sudo a2enmod rewrite

2 - Modifier la directive AllowOverride dans la conf apache fichier:

sudo nano /etc/apache2/apache2.conf

changer le Permitoverride de Aucun à tous dans ce bloc

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

3-Redémarrer Apache

sudo service apache2 restart
0
répondu Bassem El Hachem 2018-08-28 01:30:21