Lors d'un accès à un serveur web, la réécriture d'URL consiste à transformer une URL demandée par un client en une autre URL correspondante sur le serveur. Cette technique est utile pour simplifier l'écriture d'une URL ou de transformer des chemins virtuels en paramètres passés au serveur.
La réécriture d'URL permet à un client de demander l'adresse suivante :
http://www.sigb.net/pmbservices/formation
Qui sera transformée pour le serveur en :
http://www.sigb.net/page.php?rubrique=pmbservices&sous_rubrique=formation
Les paramètres d'une URL sont les information passées après le caractère ?
dans une URL. Ce sont généralement un ensemble de couples nom=valeur
séparés par le caractère &
.
Dans l'exemple ci-dessus, les paramètres sont :
rubrique=pmbservices&sous_rubrique=formation
Composés de deux couples (un couple est la déclaration d'un paramètre) :
rubrique = pmbservices
et
sous_rubrique = formation
Lors de la réécriture d'URL, on peut demander la copie d'une certain nombre de paramètres dans l'adresse du serveur.
L'adresse http://www.sigb.net/pmbservices/formation?chapitre=2
Sera transformé en pour le serveur en :
http://www.sigb.net/page.php?rubrique=pmbservices&sous_rubrique=formation&chapitre=2
Le paramètre chapitre a été copié dans l'URL du serveur.
La réécriture d'URL se paramètre sur le serveur web et dépend du type de serveur (Apache, IIS, etc.). Lorsque le serveur web reçoit une URL, il regarde si il y a une règle de transformation déclarée et si c'est le cas, il la transforme.
Dans PMB, un seul script connector_out.php
gère l'appel à toutes les sources. Ce script est dans le dossier pmb/ws
. Pour identifier la source demandée, le client doit passer le paramètre source_id=numero_de_la_source
. La réponse dépend bien sûr du connecteur (et donc du protocole du service demandé).
En résumé, un appel à un connecteur se fait toujours par un URL du type : http://serveur/pmb/ws/connector_out.php?source_id=numero
.
Le problème est que dans certains protocoles - dont l'OAI -, l'URL appelée ne doit pas avoir d'autres paramètres que ceux autorisés par le protocole lui même. C'est à dire que le paramètre source_id
n'est pas autorisé dans l'URL.
La solution consiste donc à réécrire l'URL afin que pour le protocole, l'URL demandée par le client soit conforme, et pour le serveur que ce soit bien une adresse du type http://serveur/pmb/ws/connector_out.php?source_id=numero
qui soit appelée.
Nous allons réécrire l'URL du serveur OAI déclaré par la source 1 (remplacez le 1 par l'identifiant de votre source OAI si ce n'est pas le même) : http://serveur/pmb/ws/connector_out.php?source_id=1
en http://serveur/pmb/ws/PMBOAI
. Le mot serveur
dans l'adresse doit être bien sûr remplacé par le nom de votre serveur PMB.
Dans le sous répertoire ws
de pmb, créez un fichier .htaccess
Ce fichier doit contenir :
RewriteEngine on
RewriteRule ^PMBOAI /pmb/ws/connector_out.php?source_id=1 [L,QSA]
Appel de la nouvelle adresse
Vous pouvez appeler l'URL http://serveur/pmb/ws/PMBOAI?verb=Identify
dans votre navigateur, si la redirection fonctionne, vous devez obtenir la même page que lors de la création de la source. Dans cette page, les liens Identify
, ListRecords
, ListSets
, ListMetadataFormats
, ListIdentifiers
doivent fonctionner.
Par exemple, en cliquant sur le lien ListSets
, vous devez retrouver les sets sélectionnés dans la source.
Après avoir réécrit l'URL d'appel pour une source en particulier, nous allons faire la même chose pour réécrire l'adresse quelque soit la source. L'idée de base est d'appeler les webservices en passant l'identifiant de la source dans l'adresse virtuelle, et de demander au serveur web de détecter cet identifiant pour le transformer en paramètre.
Dans le sous répertoire ws
de pmb, créez un fichier .htaccess (ou modifiez le)
Ce fichier doit contenir :
RewriteEngine on
RewriteRule ^PMBWs_(\d+) /pmb/ws/connector_out.php?source_id=$1 [L,QSA]
Appel de la nouvelle adresse
Vous pouvez appeler l'URL http://serveur/pmb/ws/PMBWs_1?verb=Identify
dans votre navigateur, si la redirection fonctionne, vous devez obtenir la même page que lors de la création de la source. Dans cette page, les liens Identify
, ListRecords
, ListSets
, ListMetadataFormats
, ListIdentifiers
doivent fonctionner.
Par exemple, en cliquant sur le lien ListSets
, vous devez retrouver les sets sélectionnés dans la source.