Le redirection interne
Il est possible dans Apache, lors de la gestion de la requête, de faire une redirection interne, c’est à dire de faire croire qu’il y a eu une redirection, mais au lieu de la renvoyer au client, et que le client demande la nouvelle URL, elle est faite en interne. Pour pouvoir faire cela, deux possibilités :
Location: http://olivier.pons.free.fr/apache/
Location: /apache/
La première est basée sur la nature double de l’entête Location
d’un script CGI : elle force à envoyer une redirection au client, alors que la seconde fait une redirection en interne, sans envoyer quelque chose au client.
Seule la seconde possibilité nous intéresse. Il est possible de le faire de deux façons dans un module :
-
void ap_internal_redirect(
.
const char *new_uri, request_rec *r)Cette forme de redirection interne est le mécanisme à utiliser dans tous les cas à de rares exceptions près. Cette fonction crée un nouvel objet requête pour l’URL passée en paramètre, et lance la nouvelle requête comme si
new_uri
avait été demandée en premier lieu. -
void ap_internal_fast_redirect(
request_rec *new_req, request_rec *r)Cette fonction clone une structure existante
new_req
dans la requête en cours afin de pouvoir mettre en place une nouvelle requête et simuler le fait qu’on lui passe le contrôle. Ce mécanisme est parfois utilisé pour promouvoir une sous-requête en requête principale. Ce qui est important de noter c’est qu’on ne repart pas de zéro, donc on ne refait pas complètement la requête.