DokuWiki

It's better when it's simple

Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:rewrite

Dies ist eine alte Version des Dokuments!


URL Rewriting

DokuWiki Standard URL sehen etwa so aus:

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

Diese Darstellung ist nicht besonders schön und wird von manchen Suchmaschinen auch nicht besonders gut indiziert.

Die Lösung für die diese Probleme ist das so genannte URL Rewriting, also das Umschreiben in eine besser lesbare Form. DokuWiki unterstützt dabei zwei Methoden des Umschreibens, die unter Konfiguration → Erweiterte Einstellungen aktiviert werden können. Die erste Variante des Umschreibens führt über den eingesetzen Webserver, die Zweite über DokuWiki. Die folgende Tabelle fasst diese Optionen zusammen.

Wert Info Beispiel URL
0 Kein URL Rewriting. Dies ist die Standardeinstellung. http://example.com/dokuwiki/doku.php?id=wiki:syntax
1 Rewriting wird vom Webserver durchgeführt. http://example.com/dokuwiki/wiki:syntax
2 Rewriting wird von DokuWiki durchgeführt. http://example.com/dokuwiki/doku.php/wiki:syntax

URL-Rewriting ist standardmäßig deaktiviert, da es einige zusätzliche Einstellungen benötigt, die weiter unten erklärt sind. Neben den im folgenden beschriebenen Optionen kann es sinnvoll sein, zusätzlich die Option „Schrägstrich (/) als Namensraumtrenner in URLs verwenden“ zu aktivieren, da dadurch, zusätzlich zu sonstigen Regeln, die Doppelpunkte (:) durch Slashes (/) ersetzt werden.

Option 1: Webserver

$conf['userewrite'] = 1; 

Diese Einstellung erzeugt schönere URLs, dafür muss aber der Webserver entsprechend eingerichtet werden.

Apache

Rewriting URLs werden bei Apache mittels der Module mod_rewrite Apache 1 oder Apache 2 durchgeführt. Diese Module werden in der httpd.conf mit folgenden Zeilen aktiviert (Stellt sicher das diese nicht herauskommentiert sind) 1):

LoadModule rewrite_module modules/mod_rewrite.so

Die Einstellung dieser Module kann in sogenannten rewrite Rules, also Umschreiberegeln, definiert werden. Diese Regeln werden entweder direkt in der Main-Config des Servers, oder in einer .htaccess Datei im Dokuwiki Verzeichnis hinterlegt. DokuWiki bringt bereits eine .htaccess.dist Datei mit den benötigten Regeln mit, die jedoch herauskommentiert sind. Sie muss einfach nur ins DokuWiki Wurzelverzeichnis auf dem Server kopiert, nach .htaccess umbenannt und bei den Regeln die Kommentarzeichen entfernt werden.

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]

In der Zeile RewriteBase /dokuwiki, muss das /dokuwiki durch das Verzeichnis auf deinem Webserver ersetzt werden, über das dein Wiki ereichbar ist. Wenn deine normale URL (Option 0) http://www.whatever.com/projects/documents/doku.php ist, dann muss die Zeile zu RewriteBase /projects/documents angepasst werden. Jedoch wird diese Zeile häufig auch gar nicht benötigt.

Bemerkungen

.htaccess Dateien werden nur berücksichtigt, wenn die Apache main config es erlaubt - viele Standard Apache Installationen tun dies nicht. Um sie einzuschalten versuch folgendes in der httpd.conf einzufügen:

<Directory /path/to/dokuwiki>
   AllowOverride AuthConfig FileInfo Limit
</Directory>

PS: Das oben AllowOverride wird nur für die Standardeinstellung arbeiten. Wenn es nicht funktioniert versuch es mit AllowOverride All.

Alternativ können die Regeln auch direkt in der httpd.conf eingetragen werden:

<Directory /path/to/dokuwiki>
  RewriteEngine on
  ... rewrite rules here ...
</Directory>

Eventuell muss Apache neugestartet werden damit die Regeln funktionieren.

Einige Benutzer meldeten einen „403 - Forbidden“ Fehler nach dem Einschalten des Rewriting. In dem Fall kann es helfen die Option FollowSymlinks zu aktivieren:

Options +FollowSymlinks
RewriteEngine on
 
...etc.

Um „virtual mappings“ (Aliase) für Statistiken zu aktivieren, müssen diese ggf. in den Rewrite Rules ausgeschlossen werden. Beispielweise:

...
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteCond %{REQUEST_URI} !^/stats/(.*)$
...

If you're running without a RewriteBase, perhaps because you're hosting under a dedicated VirtualHost, you must modify the rewrite rules accordingly.

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 %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule (.*) /doku.php?id=$1  [QSA,L]

Each RewriteRule stanza must have a leading slash included, or Apache will return a 400 response code.

IIS

Der IIS hat standardmäßig keine Rewrite Modul. Wo ihr eines findet und wie ihr dies einrichtet könnt ihr im englischen Orginal dieser Seite nachlesen.

Clean PHP session ID

Obwohl du „saubere“ URLs verwendest, wirst du einen weiteren „DokuWiki“ Parameter in der URL wie diesen finden:

PHP session ID:

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

Diese Parameter ist eine PHP Session ID, die von PHP autmatisch vergeben wird und nicht mit URL Rewriting zu tun hat. Um auch dies abzuschalten, kann man PHP dazu zwingen Cookies für die Session ID zu verwenden, indem die Einstellung session.use_only_cookies für PHP aktiviert wird.

Dies kann überlicherweise in der php.ini eingetragen werden (Schaut bei eurem Hoster unter Support ob und wie ihr die Werte ändern könnt):

session.use_only_cookies=1

Wenn auch das nicht hilft, versucht:

session.use_trans_sid=0

Wenn PHP als Apache Modul verwendet wird, können wie Werte auch über eine .htaccess Datei mit folgender Syntax eingerichtet werden:

php_flag session.use_only_cookies on
php_flag session.use_trans_sid off

DREAMHOST:

Wenn immernoch nichts geholfen hat, kommentiert diese Zeilen in inc/init.php aus:

//    session_name("DokuWiki");
//    session_start();

Discussion

1)
sollte bei den meisten Webservern aktiviert sein
de/rewrite.1279394930.txt.gz · Zuletzt geändert: 2010-07-17 21:28 von 62.203.61.25

Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: 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