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.
Juste pour rire, voir si /index.php/hello
fonctionne.
Si tel est le cas, il s'agit probablement d'un problème .htaccess
.
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:
Ouvrez Apache httpd.conf et trouvez cette ligne:
#LoadModule rewrite_module modules/mod_rewrite.so
#
)httpd.conf
Cela devrait fonctionner!
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!
Avait exactement le même problème.
Deux choses que je devais faire pour résoudre ce problème:
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.
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.
Vous n'avez pas besoin de/pour définir autre chose que chez vous:
Route::get('hello', function()
{
return View::make('hello');
});
Devrait marcher.
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
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
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>
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>
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é.
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.
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>
Aller à
nano/etc/nginx/sites-available/yoursite
trouvez try_file et remplacez comme ci-dessous:
try_files $uri $uri/ /index.php?$query_string;
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
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.
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)
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