Récemment, j'ai commencé à apprendre Laravel
, je n'ai aucune expérience du framework auparavant. Je rencontre le problème suivant. J'essaie de configurer le fichier .htaccess afin que je puisse avoir clean URLs
mais la seule chose que je reçois sont 404 Not Found
error pages. J'ai créé un hôte virtuel - vous pouvez voir ci-dessous le fichier de configuration - et modifié le .htaccesss file
sur le répertoire public.
/etc/Apache2/sites-available
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName laravel.lar
DocumentRoot "/home/giannis/Desktop/laravel/public"
<Directory "/home/giannis/Desktop/laravel/public">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${Apache_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
. htaccesss fichier:
laravel/public
# Apache configuration file
# http://httpd.Apache.org/docs/current/mod/quickreference.html
# Note: ".htaccess" files are an overhead for each request. This logic should
# be placed in your Apache config whenever possible.
# http://httpd.Apache.org/docs/current/howto/htaccess.html
# Turning on the rewrite engine is necessary for the following rules and
# features. "+FollowSymLinks" must be enabled for this to work symbolically.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
</IfModule>
# For all files not found in the file system, reroute the request to the
# "index.php" front controller, keeping the query string intact
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
Afin de le tester, j'ai créé une vue nommée about
et effectué le routage approprié. Si je fais un lien vers http://laravel.lar/index.php/about/
, je suis routé vers la page about
si je fais un lien vers http://laravel.lar/about/
, je reçois une erreur 404 Not Found
.
J'utilise un système Debian.
Je pense que je vois ton problème. Vous ajoutez un point d'interrogation supplémentaire dans votre règle de réécriture.
RewriteRule ^(.*)$ index.php?/$1 [L]
Devrait être
RewriteRule ^(.*)$ index.php/$1 [L]
basé sur les exemples d'URL que vous fournissez. http://laravel.lar/index.php/about/
ne contient pas de point d'interrogation après index.php
Il est également possible que mod_rewrite ne soit pas activé. Il semble que vous soyez un système basé sur Debian tel que Ubuntu. Vous pouvez utiliser la commande Sudo a2enmod rewrite
pour activer mod_rewrite.
J'ai rencontré le même problème aujourd'hui. Je l'ai résolu en deux étapes
Activation du module de réécriture
Sudo a2enmod rewrite
J'ai changé AllowOverride None
en AllowOverride All
dans mon fichier de configuration d'hôte virtuel. AllowOverride None
- empêche le serveur Apache de lire tout fichier .htaccess situé dans les répertoires de votre site.
J'espère que ça aide.