Comment faire cohabiter Laravel et NGINX?

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:

<IfModule mod_rewrite.c>  
  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteRule ^(.*)$ index.php/$1 [L]
</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:

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

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:

'index' => 'index.php',  

... par celle-ci:

'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?!