Tilap.net

Développement web

Apache

Apache : forcer le slash / à la fin des url

Il y a quelques mois, j’ai du forcer la présence d’un « / » (slash) à la fin de toutes les urls d’un site afin d’en améliorer le SEO.

Pour ce faire, il y a évidemment une partie du coté code pur (refaire tous les liens dans le site par exemple) mais surtout les redirections des pages sans le slash vers les pages avec le slash.

Pour ça, il y a 2 solutions : dans le code, ou via Apache. Cette 2ème solution est beaucoup plus simple et rapide à mettre en oeuvre, et surtout plus performante. Les quelques lignes suivantes dans votre fichier de configuration de votre VirtualHost.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.tld/$1/ [L,R=301]

Vous pouvez bien évidemment aussi mettre ce code dans votre fichier .htaccess si vous n’avez pas accès au fichier de conf VirtualHost.

Apache url rewrite et url encodée avec urlencode

Voici un cas d’utilisation du mod url rewrite d’Apache assez peu documenté. En effet, je souhaite réécrire une url comportant une portion d’url encodée – dans mon cas généré avec la fonction urlencode de PHP.

La réécriture Apache et l’url encodée ne fonctionnent pas !

Je souhaite réécrire l’url suivante et récupérer la valeur http%3A%2F%2Ftilap.net%2F pour la passer en argument à un script.

http://host.tld/http%3A%2F%2Ftilap.net%2F

La règle de réécriture est simple. Par exemple dans le fichier .htaccess :


# Enable rewrite mod
RewriteEngine on
# Root path
RewriteBase /
# Ignore rules on final file
RewriteRule ^index\.php$ - [L]
# if folder or file does not exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite by sending the url to the main script
RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA]

Malheureusement, ça ne fonctionne pas (erreur interne). Pourtant la règle de réécriture est correcte…

Directive .gitignore non prises en charge

Le fichier .gitignore dans un projet Git permet de lister les fichiers à ignorer. Mais s’il n’a pas été ajouté dès le premier commit du projet, ses directives ne seront pas prises en charge par la suite.

Comment faire en sorte que le fichier .gitignore soit pris en charge à postériori ?

Il suffit de vider le cache de votre repository git local, puis d’ajouter à nouveau le contenu de votre projet. Ca tient en 2 lignes de commandes :

git rm --cached .gitignore
git add .gitignore

Au prochain commit, votre fichier .gitignore sera pris en compte ainsi que ses directives.

X