URL propres avec Dokuwiki #
Cas général #
Liens #
- Dokuwiki et les moteurs de recherche : http://www.dokuwiki.org/fr:seo
- Dokuwiki et le mode rewrite (en anglais) : http://www.dokuwiki.org/rewrite
Installation #
J’ai donc suivi le lien sur le rewrite pour modifier dokuwiki :
- userewrite = 1
- useslash = 1 J’ai ensuite modifié ma configuration nginx en conséquence (comme indiqué dans le lien) :
root /var/www/xxx;
index doku.php;
location / {
try_files $uri $uri/ @dokuwiki;
}
location @dokuwiki {
rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
rewrite ^/(.*) /doku.php?id=$1&$args last;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
Bilan #
Ca marche bien …. sauf pour les tags qui restent avec des urls longues comme le bras.
Les tags #
J’ai cherché un petit peu et j’ai juste trouvé un post sur une mailing list correspondant exactement à mon problème : http://www.freelists.org/post/dokuwiki/PATCH-Clean-URLs-for-tags-and-blogarchive . J’ai donc bêtement appliqué son patch et tout a fonctionné du premier coup. Il restait juste à ajouter une règle dans la configuration nginx :
location @dokuwiki {
rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
rewrite ^/tag/(.*) /doku.php?id=tag:$1&do=showtag&tag=tag:$1 last;
rewrite ^/(.*) /doku.php?id=$1&$args last;
}
Si besoin, le patch pour le plugin tag est en dessous :
diff -Naur -x '*.dat' dokuwiki/lib/plugins/tag/action.php slucas-wiki/lib/plugins/tag/action.php
--- dokuwiki/lib/plugins/tag/action.php 2009-04-27 19:56:32.000000000 +0000
+++ slucas-wiki/lib/plugins/tag/action.php 2010-09-27 20:03:39.000000000 +0000
@@ -78,6 +78,7 @@
}
function _handle_tpl_act(&$event, $param) {
+ global $ID;
global $lang;
if($event->data != 'showtag') return;
@@ -86,7 +87,7 @@
$tagns = $this->getConf('namespace');
$flags = explode(',', trim($this->getConf('pagelist_flags')));
- $tag = trim(str_replace($this->getConf('namespace').':', '', $_REQUEST['tag']));
+ $tag = trim(str_replace($this->getConf('namespace').':', '', $ID));
$ns = trim($_REQUEST['ns']);
if ($helper =& plugin_load('helper', 'tag')) $pages = $helper->getTopic($ns, '', $tag);
diff -Naur -x '*.dat' dokuwiki/lib/plugins/tag/helper.php slucas-wiki/lib/plugins/tag/helper.php
--- dokuwiki/lib/plugins/tag/helper.php 2009-05-11 13:45:14.000000000 +0000
+++ slucas-wiki/lib/plugins/tag/helper.php 2010-09-27 20:15:34.000000000 +0000
@@ -134,7 +134,8 @@
}
} else {
$class = 'wikilink1';
- $url = wl($tag, array('do'=>'showtag', 'tag'=>$tag));
+ if ($conf['userewrite'] == 1) $url = wl($tag);
+ else $url = wl($tag, array('do'=>'showtag', 'tag'=>$tag));
}
$links[] = '<a href="'.$url.'" class="'.$class.'" title="'.hsc($tag).
'" rel="tag">'.hsc($title).'</a>';
@@ -232,6 +233,7 @@
if (!(($tag{0} == '+') || ($tag{0} == '-'))) continue;
$cleaned_tag = substr($tag, 1);
$tagpages = $this->topic_idx[$cleaned_tag];
+ if (!$tagpages) $tagpages = array();
$and = ($tag{0} == '+');
foreach ($pages as $key => $page) {
$cond = in_array($page['id'], $tagpages);
Le plugin cloud #
Ce plugin (http://www.dokuwiki.org/plugin:cloud) n’était pas non plus adapté aux url propres dans les nuages de tags qu’il génère, je l’ai donc modifié de la même manière que le plugin tag.
diff -Naur -x '*.dat' dokuwiki/lib/plugins/cloud/syntax.php slucas-wiki/lib/plugins/cloud/syntax.php
--- dokuwiki/lib/plugins/cloud/syntax.php 2010-09-03 09:50:16.000000000 +0000
+++ slucas-wiki/lib/plugins/cloud/syntax.php 2010-09-28 11:53:52.000000000 +0000
@@ -102,7 +102,8 @@
$name = $word;
}
} else {
- $link = wl($id, array('do'=>'showtag', 'tag'=>$word));
+ if ($conf['userewrite'] == 1) $link = wl($id);
+ else $link = wl($id, array('do'=>'showtag', 'tag'=>$word));
}
$title = $word;
$class .= ($exists ? '_tag1' : '_tag2');