DokuWiki

It's better when it's simple

Outils pour utilisateurs

Outils du site


fr:config:userewrite

Réécriture d'URL

Par défaut, DokuWiki ne réécrit pas d'URL, ce qui donne des URL comme celle-ci :

http://example.com/doku.php?id=page

Ces URL sont considérées comme laides et ne sont pas bien indexées par certains moteurs de recherche.

La solution consiste à activer la réécriture d'URL, qui est désactivée par défaut.

Instructions en anglais clair

Étapes

  1. Allez dans l'administration
  2. Ouvrir les paramètres de configuration
  3. Changez l'option “Utiliser des URL esthétiques” en .htaccess
  4. En dessous, cochez l'option “Utiliser ”/“ comme séparateur d'espace de noms dans les URL
  5. Sauvegarder
  6. Ensuite, à l'aide d'un ftp ou d'un gestionnaire de fichiers, vous devez accéder à votre dossier /wiki/ que vous avez créé lors de la création de votre wiki.
  7. À l'intérieur, vous trouverez un fichier appelé .htaccess et .htaccess.dist. (si vous ne le voyez pas, assurez-vous que les fichiers cachés sont visibles. Il peut s'agir d'une option que vous avez lors de la connexion en fonction de votre fournisseur d'hébergement, ou créez simplement un fichier appelé .htaccess et téléchargez-le)
  8. dans le fichier .htaccess, collez ce qui suit (vous pouvez également décommenter la section dans .htaccess.dist puis la renommer en .htaccess) :
RewriteEngine on
 
RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$                        doku.php  [L]
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
RewriteRule ^index.php$               doku.php

Cela vous donnera un format comme www.myexample.com/wiki-article. Si vous avez un format différent pour votre adresse, comme www.myexample.com/dokuwiki/wiki-article, placez cette ligne juste après RewriteEngine on

RewriteBase /dokuwiki

où /dokuwiki doit être remplacé par le nom réel du dossier que vous utilisez.

Plus de détails pour les connaisseurs techniques

DokuWiki prend en charge deux méthodes de réécriture d'URL, activées via l'option userewrite. L'un s'appuie sur les capacités de réécriture du serveur Web ; l'autre gère les URL réécrites dans DokuWiki. Le tableau ci-dessous résume ces options.

Valeur Info Exemple d'URL
0 Aucune réécriture d'URL n'est utilisée. C'est la valeur par défaut. http://example.com/dokuwiki/doku.php?id=wiki:syntax
1 La réécriture est gérée par le serveur Web. http://example.com/dokuwiki/wiki:syntax
2 La réécriture est effectuée par DokuWiki. http://example.com/dokuwiki/doku.php/wiki:syntax

La réécriture d'URL est désactivée par défaut car elle nécessite une configuration supplémentaire en plus de définir l'option de configuration appropriée - ces configurations sont décrites ci-dessous.

La réécriture d'URL peut être activée à ?do=admin&page=config#_advanced ou dans la ligne de fichier locale conf/local.php qui lit $conf['userewrite'] = N;. N est le nombre 0, 1 ou 2. La valeur par défaut est zéro sans cette ligne présente. Suivez les instructions de configuration ci-dessous pour l'option choisie.

Option 1 : serveur Web

:!: N'oubliez pas de définir ce qui suit dans le gestionnaire de configuration /start?do=admin&page=config

  • Utilisez de belles URL : .htaccess
  • Utilisez une barre oblique comme séparateur d'espace de noms dans les URL [x]

Sinon, les règles de réécriture ne seront pas utiles.

Apache

La réécriture des URL dans Apache se fait via le module mod_rewrite de Apache 1 ou Apache 2.

DokuWiki est livré avec un fichier .htaccess.dist qui contient les règles de réécriture nécessaires pour le mode 1.

Voici un exemple

RewriteEngine on
 
RewriteBase /dokuwiki
 
RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$                        doku.php  [L]
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
RewriteRule ^index.php$               doku.php

Sur la ligne RewriteBase /dokuwiki, vous devrez peut-être remplacer le /dokuwiki par le répertoire que vous utilisez dans votre URL pour accéder au wiki. Si votre wiki apparaît au niveau supérieur du domaine (par exemple, http://example.com pointe vers la page de démarrage du wiki, utilisez la ligne suivante : RewriteBase /.

Vous devrez peut-être également renommer le fichier de .htaccess.dist à .htaccess.

Apachectl status broken

Dokuwiki rewrite rule affect apachectl status command and make it return dokuwiki 404 page instead of the server-status page. You can fix that by either putting this in dokuwiki rewrite rules

RewriteCond %{REQUEST_URI} !^/server-status$

or creating an empty server-status file in dokuwiki root folder where doku.php is located. See forum post Apachectl status is broken with dokuwiki

404 not found error

You may need to do this.

IIS (ou Microsoft Azure Web App)

Activez la réécriture d'URL et insérez l'ensemble de règles approprié :

<rewrite>
<rules>
 
<rule name="rule 1C" stopProcessing="true">
	<match url="^_media/(.*)" />
	<action type="Rewrite" url="/lib/exe/fetch.php?media={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2C" stopProcessing="true">
	<match url="^_detail/(.*)" />
	<action type="Rewrite" url="/lib/exe/detail.php?media={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 3C" stopProcessing="true">
	<match url="^_export/([^/]+)/(.*)" />
	<action type="Rewrite" url="/doku.php?do=export_{R:1}&amp;id={R:2}" appendQueryString="true" />
</rule>
<rule name="rule 4C" stopProcessing="true">
	<match url="^$" />
	<action type="Rewrite" url="/doku.php" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
           </conditions>
</rule>
<rule name="rule 5C" stopProcessing="true">
	<match url="(.*)" />
	<action type="Rewrite" url="/doku.php?id={R:1}" appendQueryString="true" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
</rule>
<rule name="rule 6C">
	<match url="^index.php$" />
	<action type="Rewrite" url="/doku.php" />
</rule>
</rules>
</rewrite>

Si vous utilisez Azure Web App, placez simplement ces lignes sous les balises <system.webServer> dans le fichier web.config (situé dans wwwroot de votre application).

IIS 7.0 ou supérieur

IIS 7.0 et versions ultérieures peuvent être étendus avec le module de réécriture d'URL 2.0 disponible auprès de Microsoft pour x86 et x64

Enregistrez les règles Apache ci-dessus dans un fichier .htaccess en supprimant la ligne “RewriteBase /dokuwiki”. Cela ne sera pas nécessaire car nous ajouterons les règles directement à la racine du wiki.

Dans IIS Manager, sélectionnez votre dossier Wiki, et sous IIS, sélectionnez “URL Rewrite” (si vous aviez Manager ouvert avant l'installation, une actualisation sera nécessaire)

Dans le volet des actions sur le côté droit, choisissez “Règles d'importation”

Pour votre fichier de configuration, sélectionnez le fichier .htaccess et importez, cela devrait vous donner 6 règles converties.

Enfin, appuyez sur Appliquer dans le panneau Actions sur le côté droit.

Configurez votre Wiki pour utiliser les règles .htaccess pour la réécriture et vous devriez maintenant voir vos URL réécrites.

Nginx

Voir nginx documentation. Dans l'exemple suivant, la racine de notre serveur est /var/www, et nous extrayons dokuwiki vers /var/www/wiki.

server {
    listen 80;
    server_name example.com www.example.com;
 
    #maximum file upload size is 4MB - change accordingly if needed
    client_max_body_size 4M;
    client_body_buffer_size 128k;
 
    root /var/www/wiki;
    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$ {
        if (!-f $request_filename) { return 404; }
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REDIRECT_STATUS 200;
        fastcgi_pass 127.0.0.1:9000;
    }
}

Remarques

Si vous utilisez https, la variable de serveur HTTPS doit être définie pour permettre une liaison correcte dans dokuwiki. Ceci peut être fait dans la section serveur avec :

fastcgi_param HTTPS on;

Le mot-clé dernier des règles de réécriture avant la configuration de l'emplacement garantit que la réécriture n'a lieu qu'une seule fois. Vous devez remplacer tous les /dokuwiki/ apparaissant ci-dessus dans votre répertoire wiki par rapport au répertoire racine du serveur Web.

Si vous copiez-collez ces configurations, assurez-vous d'ajouter des emplacements pour sécuriser certains des répertoires comme décrit sur la page Security.

httpd (OpenBSD)

Voir aussi documentation httpd. Par défaut la racine du serveur est /var/www et dokuwiki est dans /var/www/dokuwiki

server "default" {
  listen on egress port 443
  root "/dokuwiki"
  directory index doku.php
 
  # Set according to upload_max_filesize and post_max_size in php.ini  
  connection max request body 20971520  
 
  location "*.php"     { fastcgi socket "/run/php-fpm.sock" }
 
  # Block access to non-public dirs
  location "/data/*"   { block }
  location "/conf/*"   { block }
  location "/bin/*"    { block }
  location "/inc/*"    { block }
  location "/vendor/*" { block }
 
  # URL rewrite rules  
  location match "/media/(.*)" {
    request rewrite "/lib/exe/fetch.php?media=%1"
  }
 
  location match "/detail/(.*)" {
    request rewrite "/lib/exe/detail.php?media=%1"
  }
 
  location match "/export/([^/]+)/(.*)" {
    request rewrite "/doku.php?do=export_%1&id=%2"
  }
 
  location match "/(lib/.*)" {
    request rewrite "/%1"
  }
 
  location match "/([^lib])" {
    request rewrite "/doku.php?id=$DOCUMENT_URI&$QUERY_STRING"
  }
}

Option 2 : DokuWiki

Dans votre fichier conf/local.php, ajoutez ou modifiez la ligne afin qu'elle se lise :

$conf['userewrite'] = 2;

Cette option ne nécessitera aucune configuration de serveur Web. Cependant, il s'appuie sur la fonctionnalité PATH_INFO du standard CGI tel qu'implémenté par Apache. IIS est connu pour ne pas fonctionner avec ce paramètre. Cependant, les nouvelles versions d'IIS semblent fonctionner avec cela.

Nettoyer l'ID de session PHP

Malgré l'utilisation d'URL “propres”, vous pouvez rencontrer un paramètre “DokuWiki” dans l'URL ressemblant à ceci :

Identifiant de session PHP :

http://example.com/example?DokuWiki=c81a95369a66576982119e2a60b557a5

Ce paramètre est l'ID de session PHP et est automatiquement ajouté par PHP. Cela n'a rien à voir avec la réécriture. Pour l'éviter, vous pouvez forcer PHP à toujours utiliser des cookies pour les sessions en définissant l'option session.use_only_cookies pour PHP.

Cela se fait généralement dans le fichier de configuration php.ini :

session.use_only_cookies=1

Vous pouvez également essayer :

session.use_trans_sid=0

Voir aussi

fr/config/userewrite.txt · Dernière modification : 2022-09-23 16:14 de JeromeP

Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki