Supprimer index.php des URLS d’une application web

Supprimer index.php des URLS d'une application web

Le problème

Vous mettez une application ou un site web en ligne et vous réalisez que le fichier « index.php » persiste dans l’URL ! 🙄

Exemple : 

  • URL source : http://www.example.com/index.php/section1/section2
  • URL cible : http://www.example.com/section1/section2

Pour enlever « index.php » de vos URLs, il faut effectuer une réécriture d’URL. Cela peut se faire si les conditions suivantes sont réunies : 

  1. Apache tourne sur votre machine avec le mode rewrite activé
  2. Un fichier .htaccess existe à la racine de votre application et contient des règles de réécriture. Le fichier doit avoir les permissions 666.
  3. Le virtual host de votre site ou application « 000-default.conf » doit être rédigé d’une certaine manière

Activer le mode rewrite dans Apache

Pour activer le mode rewrite sur votre machine linux, tapez la commande suivante : sudo a2enmod rewrite

 Redémarrez ensuite le serveur Apache : sudo service apache2 restart

Créer un fichier .htaccess à la racine de votre application

A la racine de votre application, donc au même niveau que le fichier « index.php », créez un fichier .htaccess. Ce fichier doit contenir le code suivant :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [L]

Voici quelques explications :

  • La directive RewriteEngine On permet d’activer la réécriture d’URLS
  • La directive RewriteCond est une condition et %{REQUEST_FILENAME} spécifie tout ce qui se trouve après le nom de domaine. Par exemple, dans « www.example.com/index.html », %{REQUEST_FILENAME} est /index.html
  • La directive RewriteRule spécifie la règle de réécriture. Dans l’exemple, si les 2 conditions sont satisfaites – ce qui se trouve après le nom de domaine n’est ni un fichier ni un dossier -, alors remplacer tout ce qui se trouve après le nom de domaine (.*) par /index.php/$1
  • En interne, le fichier index.php est toujours nécessaire, mais grave à cette directive, Apache permet la visite du site sans spécifier à l’URL « index.php ». Une redirection est donc mise en place. 

Vérifier le VHost Apache de votre application

 Le code du fichier vhost apache de votre application se trouve dans le dossier /etc/apache2/sites available/000-default.conf

Vous avez tapé la commande a2ensite 000-default.conf pour qu’il soit activé et vous avez redémarré Apache via la commande service apache2 restart 

Dans notre exemple, nous partons du principe que le nom de domaine de notre application Symfony est « www.example.com » et qu’un certificat Let’s encrypt a déjà été généré. Le contenu de ce fichier doit être le suivant :

ServerName www.example.com
Redirect / https://www.example.com
ServerAdmin dev@webstreet.io
DocumentRoot /var/www/html/my-app/public
DirectoryIndex index.php
SSLEngine on
AllowOverride All
Options -Indexes
AllowOverride FileInfo
ServerName www.example.com
SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
ErrorLog /var/log/apache2/www.example.com.error.log
CustomLog /var/log/apache2/www.example.com.access.log combined

Et voilà vous savez désormais réécrire les URLS de votre application web ! N’hésitez-pas à nous poser vos questions. 💯

Laisser un commentaire

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

Ce site web utilise des cookies pour vous offrir une meilleure expérience.