Re-ecriture d URL : Pour commencer
1 - Sommaire
Ce tutorial n'a pas pour vocation de vous expliquer de long en large le principe de la réécriture d'URL appelé URL Rewriting. Des tutoriaux sur cela existent par dizaine sur le net. Ici ne sera abordé qu'uniquement la mise en oeuvre basique. Vous trouverez dans la suite de cette rubrique le nécessaire pour procéder à la ré-écriture des divers modules.
Si la ré-écriture d'URL n'est pas bien compliqué en soit, il est indispensable d'y aller par petites touches, sans quoi, vous risquez fort de vous arracher les cheveux. Il est aussi vivement conseillé de mettre en place la ré-écriture d'URL module par module. Ceci, afin de mieux comprendre les effets des diverses lignes de code que vous allez rajouter. De même, il est aussi conseillé de procéder ligne par ligne en prenant bien soin de commencer par la ligne la plus longue et/ou contenant le plus d'occurence à ré-écrire. Sans cela, vous allez au devant d'erreurs serveur sans fin.
Avant d'aller un peu plus loin, il est impératif de savoir si le serveur où est hébergé votre site supporte la ré-écriture d'URL. Pour ce faire, créez un fichier PHP nommé, par exemple, phpinfo.php en isérant à l'intérieur le code qui suit :
puis, transférez le sur votre serveur et appelez le en écrivant dans la barre d'adresse de votre navigateur : http://www.votre_site.com/phpinfo.php. Dans la page qui s'ouvre, effectuez une recherche sur : mod_rewrite. Il devrait se trouver dans la partie apache/loaded module de la page. Si la recherche est concluante, votre serveur possède le necessaire pour la ré-écriture d'URL. Dans le cas contraire, inutile d'aller plus loin, cette dernière ne fonctionnera pas.
Pour ce qui concerne PHP-Nuke, la ré-écriture se décompose en trois partie distincte : le htaccess, qui recevra toutes les lignes "brutes"; le header.php ($urlin = array), qui recevra toutes les lignes "brutes" du htaccess; le header.php ($urlout = array), qui transformera les lignes "brutes" en ligne HTML. Tout cela est bien sur schématisé au plus simple afin d'en faciliter la compréhension.
Que va bien pouvoir faire votre serveur avec tout cela ? Très simple , lorsqu'une page, quelle qu'elle soit, est appelée, vérification est faite dans le htaccess. Si une ligne correspondante est trouvée, il envoie l'information à PHP-Nuke au travers du fichier header.php. Là encore, si une correspondance est trouvée, la ré-écriture s'opèrera pour la page demandée. Facile non ? En gardant se principe en vue, il sera donc indispensable de respecter un ordre chronologique d'ajout de lignes à ré-écrire. En effet, si le htaccess peut s'accomoder d'une inscription dans le désordre, ce n'est pas le cas du fichier header.php qui impose un ordre strict et logique. L'idéal est bien sur que tout soit mis dans le même ordre. Il sera ainsi plus facile de localiser une éventuelle erreur.
Une autre précision importante avant d'aller encore plus loin. Ce n'est pas parceque vous aurez respecté tout ce qu'écrit supra, que la ré-écriture fonctionnera. Je m'explique. En fonction du code à ré-écrire, il sera indispensable de transformer légèrement la source de ce dernier. En général, provenant d'un module. Je ne vais pas rentrer dans des détails qui me font mal à la tête sur le simple fait d'y penser. Je vais donc vous donner un simple exemple. Editez le fichier modules/Advetissing/index.php. A la ligne 62, version SV PHP-Nuke 8.1.04, vous trouverez la ligne de code suivante :
| $client_opt = "<a href=\"modules.php?name=$module_name&op=client_home\">"._MYADS."</a>"; |
|
Telle quelle, cette ligne ne sera pas ré-écrite quant bien même tout le nécessaire aura été correctement inséré dans les fichier htaccess et header.php. Par contre, si vous transformez cette ligne en :
| $client_opt = "<a href=\"modules.php?name=$module_name&op=client_home\">"._MYADS."</a>"; |
|
tout fonctionnera correctement, pourquoi ? Tout simplement parceque $module_name&op a été tranformé en $module_name&op. La différence se situe au niveau du & qui a été transformé en &. Ceci est indispensable pour un bon fonctionnement de la ré-écriture d'URL. Alors, dans le cas où vous rencontrez un problème avec une ligne donnée, pensez à vérifier le code du module concerné, cela préservera tous vos cheveux .
2 - htaccess
Dans le htaccess, pour activer la ré-écriture, il n'y pas grande chose à faire dans un premier temps. Il vous suffit juste de rajouter le code suivant :
RewriteEngine on
# EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE |
|
Cette ligne informera votre serveur que vous souhaitez utiliser la ré-écriture d'URL.
Sauvegardez et envoyez le fichier sur votre serveur.
Passez à l'étape suivante.
3 - footer.php
Je n'ai pas parlé juqu'à maintenant du fichier footer.php pour la bonne et simple raison, qu'une fois les ligne de code qui suivent ajoutées, il n'y aura plus besoin de le modifier.
Editer le fichier footer.php qui se trouve à la racine de votre site et trouvez le code suivant, en général tout en bas :
Ajouter juste avant ce code :
// Début du nécessaire à la réécriture d'URL
$contents = ob_get_contents();
ob_end_clean();
echo replace_for_mod_rewrite($contents);
// Début du nécessaire à la réécriture d'URL |
|
ce qui vous donnera :
// Début du nécessaire à la réécriture d'URL
$contents = ob_get_contents();
ob_end_clean();
echo replace_for_mod_rewrite($contents);
// Début du nécessaire à la réécriture d'URL
foot();
?> |
|
Sauvegardez et envoyez le fichier sur votre serveur.
Passez à l'étape suivante.
4 - header.php
Editez le fichier header.php en tout début de fichier, trouvez le code suivant :
if (stristr(htmlentities($_SERVER['PHP_SELF']), "header.php")) {
Header("Location: index.php");
die();
}
define('NUKE_HEADER', true); |
|
Ajoutez juste après ce code :
ob_start();
function replace_for_mod_rewrite(&$s) {
$urlin = array(
// EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE
);
$urlout = array(
// EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE
);
$s = preg_replace($urlin, $urlout, $s);
return $s;
} |
|
Là où il est mentionné // EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE est l'emplacement prévu pour placer le code de ré-écriture des différents modules. Vous trouverez tout le nécessaire dans les tutoriaux.
Vous noterez que l'on retourve les deux parties, $urlin et $urlout, dont je vous expliquais la fonction en début du tutorial.
Il ne vous reste plus qu'à insérer les lignes de code correspondante pour le ré-écriture de vos divers module.
Publié le : 2007-07-26 par stefvar, dernière modification le : 2007-09-13 par stefvar(161 lectures) |