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 :
- Apache tourne sur votre machine avec le mode rewrite activé
- Un fichier .htaccess existe à la racine de votre application et contient des règles de réécriture. Le fichier doit avoir les permissions 666.
- 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. 💯