默认情况下,DokuWiki不做任何的URL重写,它的原始URL是这样的:
这样的URL是比较难看的,更重要的是有些搜索引擎不收录。
通过设置DokuWiki的userwrite配置选项它可以支持两种URL重写方法:一个是利用服务器的mod_rewrite,另一个是在DokuWiki内部自己处理URL重写。
下面是userewrite选项值的列表及其对应的URL格式:
- 0 默认值。没有URL重写。 http://example.com/dokuwiki/doku.php?id=wiki:syntax
- 1 服务器处理 http://example.com/dokuwiki/wiki:syntax
- 2 DokuWiki处理 http://example.com/dokuwiki/doku.php/wiki:syntax
使用 Webserver
先在dokuwiki.php中设置:
Apache服务器设置
apache的URL重写是使用mod_rewrite模块。在apache的配置文件中添加如下这行:
- LoadModule rewrite_module modules/mod_rewrite.so
然后使用mod_rewrte的指令来配置URL重写规则。这些规则可以放在apache的全局配置文件内,也可以放在DokuWiki的根目录下的.htaccess文件内,事实上DokuWiki已经为了写好了这些规则放在.htaccess.dist中,内容如下:
- 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]
在RewriteBase /dokuwiki这一行,你需要根据实际情况做修改成指向你的DokuWiki目录的路径,如果你的安装是这样的:http://www.whatever.com/projects/documents/doku.php那么,这行应该改成RewriteBase /projects/documents。
注:并不是所有的apache服务器的配置都允许使用.htaccess文件,相反一般出于安全考虑而禁用了。这个时候你要么是将你的DokuWiki所在目录配置成可以使用.htaccess,可以在apache全局配置文件内加入
- <Directory /path/to/dokuwiki>
- AllowOverride AuthConfig FileInfo Limit
- </Directory>
如果上面这个配置还是不行,你可以尝试:
或者你就不用.htaccess文件,直接把这引规则放到apache的配置文件中如:
- <Directory /path/to/dokuwiki>
- 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]
- AllowOverride AuthConfig FileInfo Limit
- </Directory>
然后重起apache。如果你收到“403 - Forbidden” 这样的错误,可能是由于FollowSymlinks option设置引起的。你可以添加:
- Options +FollowSymlinks
- RewriteEngine on
其它的服务器就不讲了。
第二种方案是让DokuWiki来生成友好的URL
首先设置
此外就不再需要设置服务器了。不过,它有依赖于apache服务器的CGI标准的PATH_INFO特性。不过使用apache的alias指令可能会使用DokuWiki不能使用。
另外,使用这个方法有时候你仍然会碰见后面带有一个DokuWiki参数的URL,像下面这样
这个参数是PHP的会话ID,是PHP自动加上去的。它和URL重写无关。你可以通过配置强迫PHP使用cookie来处理会话来避免:
- session.use_only_cookies=1
如果还是那样,你可以在php.ini中设置:
当然了,如果服务器的PHP是以模块形式安装到apache上的,如果你没有服务器的权限,你可以利用.htaccess来处理:
- php_flag session.use_only_cookies on
- php_flag session.use_trans_sid off
将上面两个放到DokuWiki所在目录的.htaccess文件中。
如果这两个方法都不行,那么你可以编辑conf/local.php。注意上面的php配置选项是不允许在运行时修改的,即不能使用ini_set()函数设置,所以只能设置url_rewriter.tags:
- ini_set('url_rewriter.tags', '');