Wikini

ReecritureDURL

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-3-237-15-145.compute-1.amazonaws.com
<< FiltrerLeSpamDesReferrers DocumentationAdministrateurTechnique HeaderPhp >>



Mettre en place une réécriture d'URL

La réécriture d'URL permet d'avoir des URL indépendantes de tout aspect technique relatif au moteur de Wiki. Concrètement :
Ainsi :
Ces liens réécrits sont appelés des URL signifiantes

Pré-requis : il faut que le serveur sur lequel vous effectuez l'installation, gère la réécriture d'URL. Si c'est un serveur Apache, il faut regarder s'il intègre le module mod_rewrite. (L'hébergeur free.fr, par exemple, ne permet pas la réécriture d'URL.)


1. Modifier le fichier /actions/header.php

<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->config["base_url"]?>style/wakka.basic.css" />
<style type="text/css" media="all"> @import "<?php echo $this->config["base_url"]?>style/wakka.css";</style>


2. Déplacer les fichiers CSS

Il faut déplacer les fichiers CSS dans le répertoire spécifique pour lequel les règles de réécriture seront différentes. Dans notre exemple, il s'agit du répertoire /style/.

3. Création d'un fichier .htaccess à la racine du site.

RewriteEngine on
# N'applique aucune règle pour les fichiers contenus dans le répertoire /style/
RewriteRule ^style/(.*)$ style/$1 [L]
#
RewriteRule ^style$ wakka.php?wiki= [L]
# http://xxx.zzz/NomWiki => http://xxx.zzz/wakka.php?wiki=NomWiki
RewriteRule ^(.*)$ wakka.php?wiki=$1 [QSA,L]


4. Modification du fichier wakka.config.php

"base_url" => "http://xxx.zzz/racine/",
"rewrite_mode" => "1",













Réécriture chez OVH

Grrrrr... je n'arrive pas à mettre en oeuvre la réécriture chez OVH...
Il semble qu'OVH nécessite une mise en oeuvre particulière :
ORT (Ovh Redirect Technology) est un module développé par OVH qui
nous permet d'héberger un nombre important de sites avec peu de
RAM utilisée sur les machines.

Mod_ort modifie l'URI de la page et vous pouvez donc avoir un problème
si vous voulez utiliser mod_rewrite. La solution consiste à redefinir dans
mod_rewrite la racine de reécriture:

RewriteRule? ^/grp([0-9]+)\.php$ groupe.php?id=$1 [L]
RewriteRule? ^/art([0-9]+)\.php$ article.php?id=$1 [L]
RewriteRule? ^/age([0-9]+)\.php$ agenda.php?id=$1 [L]
RewriteRule? ^/membre_([0-9]+)\.php$ membre.php?id=$1 [L]

doivent être changés en

RewriteRule? ^/grp([0-9]+)\.php$ /groupe.php?id=$1 [L]
RewriteRule? ^/art([0-9]+)\.php$ /article.php?id=$1 [L]
RewriteRule? ^/age([0-9]+)\.php$ /agenda.php?id=$1 [L]
RewriteRule? ^/membre_([0-9]+)\.php$ /membre.php?id=$1 [L]


Mais je n'arrive à rien... Il faut dire que mon wikini est dans /dev2/1/wikini/
Peut-être que je cumule les difficultés... où dois-je mettre le .htaccess ? à la racine / ou bien dans /dev2/1/wikini/ ?
J'ai essayé la config suivante sans succès (avec le .htaccess à la racine comme dans /dev2/1/wikini/) :

RewriteEngine? on

RewriteRule? ^/(.*)$ /dev2/1/wikini/wakka.php?wiki=$1 [QSA,L,NE,PT]
RewriteRule? ^/(.*)$ /wakka.php?wiki=$1 [QSA,L,NE,PT]
RewriteRule? /(.*)$ /dev2/1/wikini/wakka.php?wiki=$1 [QSA,L,NE,PT]
RewriteRule? /(.*)$ /wakka.php?wiki=$1 [QSA,L,NE,PT]


RewriteRule? ^/dev2/1/wikini/(.*)$ /dev2/1/wikini/wakka.php?wiki=$1 [QSA,L,NE,PT]
RewriteRule? ^/dev2/1/wikini/(.*)$ /wakka.php?wiki=$1 [QSA,L,NE,PT]
RewriteRule? /dev2/1/wikini/(.*)$ /dev2/1/wikini/wakka.php?wiki=$1 [QSA,L,NE,PT]
RewriteRule? /dev2/1/wikini/(.*)$ /wakka.php?wiki=$1 [QSA,L,NE,PT]


RewriteRule? ^/dev2/1/wikini/(.*)$ /dev2/1/wikini/wakka.php?wiki=$1 [QSA,L]
RewriteRule? ^/dev2/1/wikini/(.*)$ /wakka.php?wiki=$1 [QSA,L]
RewriteRule? /dev2/1/wikini/(.*)$ /dev2/1/wikini/wakka.php?wiki=$1 [QSA,L]
RewriteRule? /dev2/1/wikini/(.*)$ /wakka.php?wiki=$1 [QSA,L]


Des idées ?
-- CharlesNepote

Au moins une : ajouter un RewriteBase, ça peut aider, grandement ! -- ProgFou


Solution alternative

Laurent Jouannau signale une autre solution pour gérer la réécriture d'URL, mais je ne la comprend pas :
http://ljouanneau.com/blog/2003/10/28/181-LusineAGazPhpwiki :
Le problème, c'est que vous vous basez sur le mod rewrite d'apache, ce qui est super chiant à configurer. Alors qu'il suffirait de le faire par vous même en php. Du genre, vous avez l'url monsite.com/wiki/truc/muche, et dans le fichier wiki.php, vous traitez vous même la partie truc/muche. C'est relativement simple, il y a plus de chance que ça passe chez les hébergeurs (il suffit juste qu'il y ait l'option Multiviews) et évite aux utilisateurs d'installer des fichiers compliqués, dur à adapter à ses propres besoins.
Que comprenez-vous ? (Je vais lui écrire pour en savoir plus.) -- CharlesNepote

Tout à fait d'accord avec Laurent, les Rewrite Rules ne fonctionnent pas sur les pages perso de Free, voici ce que je fais sur un site que je développe est qui à l'air de correspondre à ce que Laurent dit :
je met des .htaccess avec des "ErrorDocument? 404 /index.php" dedans qui renvoit vers index.php, et index.php analyse la variable $_SERVER["REQUEST_URI"] et voilà, je peux interpréter l'url comme bon me semble, l'utilisateur ne sait même pas qu'il a changé de page, l'url dans la barre d'adresse n'est pas modifiée
Avec cette façon de faire, il n'y a même pas besoin de l'option multiviews comme le dit Laurent sur sa page.
Un peu de code:
$page = $_SERVER['REQUEST_URI'];  # url demandée
$path_parts = pathinfo($page);
$pagevoulue = $path_parts["basename"];
$arborescence = $path_parts["dirname"];
$rep = split('/', $arborescence);

$rep est un tableau qui contient l'arborescence de la page demandée.



Personnelement pour que ca marche j'ai du modifier le .htaccess un peu plus délicatement.

Voici le contenu de ce fichier:

<IfModule? mod_rewrite.c>
RewriteEngine? On
RewriteOptions? MaxRedirects?=10
RewriteBase? /~pol/wiki/
# http://xxx.net/~pol/wiki/wakka.css => http://xxx.net/~pol/wiki/wakka.css
RewriteRule? ([^/]*\.css)$ $1 [L]
RewriteCond? %{REQUEST_FILENAME} !-d
# http://xxx.net/~pol/wiki/PagePrincipale => http://xxx.net/~pol/wiki/wakka.php?wiki=PagePrincipale
RewriteRule? ^([^\.\?/]+)$ /~pol/wiki/wakka.php?wiki=$1 [QSA]
</IfModule?>


Voila ... n'oubliez pas de changer les repertoires ainsi que votre fichier de config. Pas besoin de changer les fichier de style. Ce fichier htaccess prend tout en compte.
-- TheTransporter

Ca fonctionne chez moi pour afficher une page, mais l'appel aux handlers ne fonctionne pas (Not found) : PagePrincipale/edit.
Pour que cela fonctionne, il faut corriger la dernière ligne de cette façon :
RewriteRule? ^([^\.\?]+)$ /w/wakka.php?wiki=$1 [QSA]
Je n'arrive cependant pas à comprendre pourquoi ça marche. Je comprends cette ligne comme voulant dire :
Je n'utilise pas la ligne :
RewriteCond? %{REQUEST_FILENAME} !-d
-- CharlesNepote



Notez que le fichier .htaccess contenu dans le "package" n'est pas correct sur plusieurs aspects...

Il m'a fallut environ 2 minutes pour comprendre pourquoi je n'arrivais pas a la page d'installation du wiki...

Et ça pose encore des problèmes sur les pages d'édition... (a cause du "slash"...)

RobertKarpeles


Réécriture (très) facile

Je viens juste d'installer WikiNi sur un sous-domaine test afin de le comparer à WikiMedia? (et surtout comparer la facilité d'installation des deux sur Lycos... enfin c'est fait maintenant), et j'ai voulu mettre en place directement la réécriture d'url. Voici ce que j'ai fait, c'est très simple et ça marche !
  1. Déjà, surprise: à l'installation on nous mâche le travail:
  2. Pour la configuration de l'URL de votre WikiNi, enlevez la partie "wakka.php?wiki=". WikiNi créera donc des urls du type http://www.votredomaine.tld/votrerepertoire/PagePrincipale
  3. Maintenant il faut mettre en place l'url rewriting. Très facile: créez un fichier .htaccess contenant les deux lignes suivantes:
  4. RewriteEngine on
    RewriteRule ^([A-Z].+)$ /wakka.php?wiki=$1& [qsa]
  5. (NB.: il serait peut-être bon d'exclure certains carractères plutôt que d'utiliser ".+". Par ailleurs cela rend inaccessible les fichiers se trouvant à la racine et dont le nom commence par une majuscule, mais il est peu probable que vous en ayez [à part les fichiers LICENSE etc.] et il est assez simple d'écrire des règles d'exclusion...)
  6. Pour finir on constate que la feuille de style (et les images éventuelles) ne se chargent plus correctement lorsque l'on édite des pages :-( Mais qu'à cela ne tienne ! On va dire au navigateur wab où il doit aller les chercher !
  7. Pour ce faire, éditez le fichier actions/header.php. Vers la ligne 39, juste après "<head>", vous n'avez qu'à ajouter la balise suivante:
  8. <base href="http://www.votredomaine.tld/votrerepertoire/" />
  9. Et le tour est joué ! Pas d'inquiétudes, ça reste du XHTML1.0 valide :-)

LordFarquaad


Le <base href="..." /> empêcherait une lecture du site hors ligne, n'est-ce pas ? -- ProgFou

Je ne voulais pas toucher au moteur de wikini pour mes rewrite rules:

Et donc ne pas "Modifier le fichier /actions/header.php"

<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->config["base_url"]?>style/wakka.basic.css" />
<style type="text/css" media="all"> @import "<?php echo $this->config["base_url"]?>style/wakka.css";</style>


G donc écrit les rewrites rules suivantes qui fonctionnent (en tous cas sous Apache 2.0):

RewriteCond %{REQUEST_URI} !^.*\.css [NC]
RewriteRule ^(.*)$ wakka.php?wiki=$1 [QSA,L]

Il faut toujours bien sur:

Modifier le fichier wakka.config.php

"base_url" => "http://xxx.zzz/racine/",
"rewrite_mode" => "1",

(quoique ça marchait très bien avec "rewrite_mode" => "0", ;-)

RoBert

Effectivement. Tu as raison.

Il faut en fait toujours modifier le fichier /actions/header.php

et légèrement différement : le chemin vers les feuilles de styles doit être absolu, ce qui revient à ajouter un "/" (éventuellement un "/repertoire/") devant les "wakka" contenu dans /actions/header.php, ce qui donne ceci et ca marche:
<link rel="stylesheet" type="text/css" media="screen" href="/wakka.basic.css" />
<style type="text/css" media="all"> @import "<?php echo (!isset($_COOKIE["sitestyle"]))?'
/wakka':'/'.$_COOKIE["sitestyle"] ?>.css";</style>
Merci de ta remarque.
RoBert


J'ai un petit soucis avec la première solution : lorsque je tape dans un navigateur http//xxx.www.ccc/racine au lieu de http://xxx.www.ccc/racine/ ca ne marche pas. Je crois que c'est le dernier Rewrite (RewriteRule ^(.*)$ wakka.php?wiki=$1 [QSA,L]) qui pose problème. Une idée ?
MaikoMou?
C'est que ton serveur ne prend pas en charge la redirection automatique de racine vers recine/. A mon sens c'est la seule possibilité, as-tu testé avant d'intsaller la redirection ? As-tu un message d'erreur qui s'affiche ? -- LordFarquaad

La solution de wikka (en)

Ils sont malins chez wikka, leur règles du module rewrite ne prennent pas en compte les répertoires à ignorer (comme style/ par exemple) mais ces répertoires contiennent simplement un petit .htaccess tout simple qui contient ceci :
Ainsi, on obtient le même fonctionnement qu'ici mais d'une façon un peu plus lisible. C'est aussi une bonne solution pour ceux qui veulent ajouter un autre répertoire contenant des fichiers à inclure (scripts, etc.) sans modifier les règles ReWrite. -- OlivierPoncin

<< FiltrerLeSpamDesReferrers DocumentationAdministrateurTechnique HeaderPhp >>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]