Comment faire cohabiter Laravel et NGINX?

samedi 8 décembre 2012
2 minutes de lecture

L'utilisation du framework PHP Laravel avec le serveur HTTP NGINX fonctionne vraiment bien. Du moins, très bien lorsqu'on a trouvé les bons paramètres pour la réécriture des adresses. Considérant que l'information était introuvable sur le Web, je vais vous partager les lignes magiques à inscrire dans vos fichiers de configuration.

Pour un serveur Web Apache, voici le .htaccess nécessaire pour rediriger automatiquement les requêtes envoyées au fichier index.php:

1<IfModule mod_rewrite.c>
2 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond
3 %{REQUEST_FILENAME} !-d RewriteRule ^(.\*)$ index.php/$1 [L]
4</IfModule>
1<IfModule mod_rewrite.c>
2 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond
3 %{REQUEST_FILENAME} !-d RewriteRule ^(.\*)$ index.php/$1 [L]
4</IfModule>

Dans le cas de NGINX, le fonctionnement de l'URL Rewriting n'est pas le même. Voici donc les paramètres à insérer dans votre Server Block pour que le module HttpRewriteModule supporte adéquatement le routage avec Laravel:

1if (!-e $request_filename)
2{
3 rewrite ^/(.*)$ /index.php?/$1 last;
4 break;
5}
1if (!-e $request_filename)
2{
3 rewrite ^/(.*)$ /index.php?/$1 last;
4 break;
5}

En bref, la consigne vérifie si le nom du fichier inséré après la racine du nom de domaine existe. S'il n'existe pas, la requête est automatiquement juxtaposée après /index.php?/.

Également, n'oubliez pas de configurer adéquatement votre fichier de configuration application.php situé dans le répertoire application/config/application.php.

Remplacez la ligne suivante:

1'index' => 'index.php',
1'index' => 'index.php',

... par celle-ci:

1'index' => '',
1'index' => '',

Simple, non? Pour en apprendre davantage sur NGINX, utilisé sur 12,18% des serveurs dans le monde, je vous invite à jeter un oeil à leur site Web. Sinon, allez lire mon précédent article Laravel comme framework PHP plutôt que CodeIgniter?! ∎