Table des matières
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
- Allez dans l'administration
- Ouvrir les paramètres de configuration
- Changez l'option “Utiliser des URL esthétiques” en .htaccess
- En dessous, cochez l'option “Utiliser ”/“ comme séparateur d'espace de noms dans les URL”
- Sauvegarder
- 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.
- À 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)
- 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}&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