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.
18 réponses
juste pour rire, voir si /index.php/hello
fonctionne.
si oui, alors c'est très probablement un problème .htaccess
.
a eu le même problème en exécutant Laravel 4 sur WAMP (Windows 8).
La solution qui a fonctionné pour moi était:
-
Open apache httpd.conf et trouver cette ligne:
#LoadModule rewrite_module modules/mod_rewrite.so
- Décommentez cette ligne (supprimez le
#
) - Enregistrer
httpd.conf
- redémarrer WAMP
Il faut qu'on travaille!
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!
avait exactement le même problème.
deux choses que je devais faire pour corriger cela:
- activer rewrite_module Apache
-
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.
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.
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.
é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
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é.
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>
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>
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>
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.
passez à
nano / etc/nginx/sites-available /yoursite
trouver try_file et remplacer comme suit:
try_files $uri $uri/ /index.php?$query_string;
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.
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
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
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)
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