web-dev-qa-db-fra.com

Configurez des URL propres pour Laravel à l'aide d'une règle de réécriture dans index.php

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.

3

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.

6

J'ai rencontré le même problème aujourd'hui. Je l'ai résolu en deux étapes

  1. Activation du module de réécriture

    Sudo a2enmod rewrite
    
  2. 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.

6
Sergey Tsoy