Damien Mathieu

Blog d’un développeur web

Rediriger toutes les url non existantes vers le même fichier

juin16

Il peut arriver que vous cherchiez à concevoir une application web et que de par le principe de cette conception, vous ayez besoin de toujours charger le même fichier quelque soit l’url appellée. Sauf si le fichier existe déjà (le cas d’une image par exemple).

La solution qui semblerait la plus simple au premier abord est de trifouiller avec ErrorDocument dans le .htaccess

ErrorDocument 404 /index.php

Ca fonctionne puisque à partir du moment ou votre fichier n’existe pas, vous êtes redirigé vers votre index.php. Vous n’avez alors plus qu’à afficher votre contenu. Et surtout ne pas oublier de forcer le code HTTP 200 au lieu de 404. Sans quoi votre site ne sera jamais indexé par les moteurs de recherche (et vous êtes en contradiction avec la norme du protocole HTTP). Cette solution est intéressante notemment si vous n’avez pas accès à l’URL rewriting.

 

Une autre, que je trouve plus propre, consiste à utiliser l’URL rewriting.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Qu’est-ce que c’est que toutes ces lignes ?

RewriteEngine On

Ici, on se contente d’activer l’url rewriting.

 

RewriteCond %{REQUEST_FILENAME} !-d

Si l’url existe et est un répertoire, on ignore les lignes suivantes

RewriteCond %{REQUEST_FILENAME} !-f

Si l’url existe et est un fichier, on ignore la ligne suivante

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Et donc, si ce n’est ni un fichier, ni un répertoire, on redirige l’url vers index.php. Ici, on passe également l’URL de la page en GET.

Cette astuce est utilisée dans divers frameworks. Notemment CakePHP et Ruby on Rails.

Entre temps

Et hier soir

posted under Développement

Email will not be published

Website example

Your Comment:

 

Rss Feeds

En Français
In English