J'essaie d'utiliser Laravel 5.1 pour la première fois. J'ai pu l'installer et https://sub.example.com/laravel/public/
affiche ce qui devrait. Cependant, les vues que je crée me donnent une erreur 404 Page non trouvée.
Voici ce que j'ai fait jusqu'à présent:
J'ai créé un contrôleur dans laravel\app\Http\controllers\Authors.php
Voici le code derrière le fichier Authors.php
<?php
class Authors_Controller extends Base_Controller {
public $restful = true;
public function get_index() {
return View::make('authors.index')
->with('title', 'Authors and Books')
->with('authors', Author::order_by('name')->get());
}
}
Ensuite, j'ai créé une vue dans laravel\resources\views\Authors\index.blade.php
Voici le code derrière le fichier index.blade.php
@layout('layouts.default')
@section('content')
Hello, this is a test
@endsection
Ensuite, j'ai créé une mise en page dans laravel\resources\views\layouts\default.blade.php
Voici le code derrière le fichier default.blade.php
<!DOCTYPE html>
<html>
<head>
<title>{{ $title }}</title>
</head>
<body>
@if(Session::has('message'))
<p style="color: green;">{{ Session::get('message') }}</p>
@endif
@yield('content')
Hello - My first test
</body>
</html>
Enfin, j'ai créé un itinéraire dans laravel\app\Http\routes.php
<?php
Route::get('/', function () {
return view('welcome');
});
Route::get('authors', array('as'=>'authors', 'uses'=>'authors@index'));
Mais pour une raison quelconque, je continue à avoir 404 error Page not found.
J'ai activé le mod_rewrite sur mon Apache 2.4.9 en supprimant la mise en commentaire de la ligne
LoadModule rewrite_module modules/mod_rewrite.so
Puis redémarré Apache.
D'après ce que je peux dire dans la sortie php_info()
, le mod_rewrite est activé.
Loaded Modules
core mod_win32 mpm_winnt http_core mod_so mod_php5 mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_Host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_socache_shmcb mod_ssl
Mon fichier .htaccess actuel ressemble à ceci "qui est le défaut d'usine"
Options -Vis multiples
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
J'ai également essayé de le changer pour le code ci-dessous selon la [documentation 1
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Cependant, je reçois toujours la page 404 quand je vais à
https://sub.example.com/laravel/public/authors
Qu'est-ce que je fais mal? Comment puis-je résoudre ce problème?
Je vois le même comportement de pouvoir visiter/route mais toutes les autres pages renvoient un 404 lors de la première installation de sites Laravel.
Dans votre fichier de configuration Apache httpd.conf ou httpd-vhosts.conf, vous devez activer les directives pouvant être placées dans le fichier .htaccess.
Voici un exemple de ma configuration VirtualHost:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "C:/www/laravel_authority-controller_app/public"
ServerName authoritycontroller.www
ErrorLog "logs/AuthorityController.www-error.log"
CustomLog "logs/AuthorityController.www-access.log" common
<Directory "C:/www/laravel_authority-controller_app/public">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.Apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks Includes ExecCGI
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
</VirtualHost>
La saisie de clé pour votre problème est AllowOverride All
. Cela devrait suffire à faire fonctionner le site Web, mais vous pouvez également inclure options
et Require all granted
s’ils sont cohérents sur l’ensemble du site Web.
Si vos itinéraires Laravel ne fonctionnent pas et que vous obtenez des erreurs "Introuvable" à chaque fois que vous essayez de charger une page, votre fichier .htaccess manque probablement de la permission pour accomplir son devoir.
La clé est la directive Apache AllowOverride.
Si AllowOverride n'est pas défini sur Tous, votre fichier Laravel .htaccess (/public/.htaccess
) ne pourra pas activer mod_rewrite et vos itinéraires ne fonctionneront pas.
La première étape consiste à ouvrir votre fichier Apache httpd.conf. Sous OS X, il se trouve à l'adresse suivante:
/private/etc/Apache2/httpd.conf
Option 1) Modifier votre directive principale
Cela modifiera la valeur AllowOverride de tous vos sites Web. Dans votre fichier httpd.conf, recherchez la directive principale:
**<Directory "/var/www/html">
...
AllowOverride None
...
</Directory>**
Changez-le simplement en ceci:
**<Directory "/var/www/html">
...
AllowOverride All
...
</Directory>**
Option 2) Ajoutez une directive à la directive de votre site.
**
<VirtualHost 127.0.0.1:80>
DocumentRoot "/var/www/html/epigroove/public"
...
<Directory "/var/www/html/epigroove/public">
AllowOverride All
</Directory>
</VirtualHost>
**
Enregistrez les modifications dans votre fichier httpd.conf
, redémarrez ou rechargez Apache, et vos itinéraires devraient être opérationnels.
si vous êtes sur Ubuntu, vous devez faire 3 choses. 1. Vérifiez si "/ var/www/html/VotreProject/public/.htacess" est comme ceci.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
2. Ajoutez ces lignes sur /etc/Apache2/sites-available/000-default.conf
<Directory "/var/www/html">
AllowOverride all
Require all granted
</Directory>
Remarque: rappelez-vous qu’il s’agit d’un fichier système, vous devez donc utiliser cette commande.
Sudo gedit /etc/Apache2/sites-available/000-default.conf
en dernier activer le module de réécriture.
LoadModule modules rewrite_module/mod_rewrite.so
ou
Sudo a2enmod rewrite
Si vous utilisez Apache HTTPD 2.2.15 sur Linux (CentOS 6.7 dans mon cas), la directive directory ressemblera à ceci:
<Directory />
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
allow from all
</Directory>
Cependant, vous n’avez probablement pas besoin de la ligne Options, sauf si vous utilisez ces options.
Merci à la réponse 2.4. Cela m'a aidé à résoudre ce problème pour moi sur 2.2 et j'ai un autre serveur fonctionnant sous 2.4 auquel je peux l'appliquer aussi.
aussi, la URL
est sensible à la casse au nom du dossier
nom du dossier: camelCase
alors l'URL doit être localhost/camelCase/route-1
espérons que cette aide quelqu'un xD, peu idiot