Comment retirer « public » des URLS d’un site Laravel en production

Quand vous mettez votre site Laravel en production, vous n’avez peut-être pas envie de voir des URLS toutes moches comme lors de notre phase de développement du genre :

http://mon-url-sympa.fr/public/profil-utilisateur

Pas de soucis, c’est assez simple de changer ça en :

http://mon-url-sympa.fr/profil-utilisateur

Alors pour commencer on va modifier le fichier .htaccess à la racine de notre site, pour lui ajouter des conditions de réécriture comme ceci :

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

Il faut également renommer notre fichier server.php en index.php (toujours à la racine de notre site) !

server.php_to_index.php_laravel_deploy_1

Les URLS fonctionnent déjà correctement mais le style CSS est complètement… Ben.. Absent !

Pour finir la manipulation, on va modifier le fichier helpers.php. C’est ce fichier qui nous propose la fonction « asset() » mais qui du coup, ne retourne plus le bon chemin ^^

// fichier : /Illuminate/Foundation/helpers.php/
// ...
function asset($path, $secure = null)
{
 return app('url')->asset('public/'.$path, $secure);
}
// ...

Vous ne devriez plus avoir de problème d’url en faisant comme ça 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *