DokuWiki的URL重写

默认情况下,DokuWiki不做任何的URL重写,它的原始URL是这样的:
  1. http://example.com/doku.php?id=page
  这样的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中设置:
  1. $conf['userewrite'] = 1;
Apache服务器设置

  apache的URL重写是使用mod_rewrite模块。在apache的配置文件中添加如下这行:
  1. LoadModule rewrite_module modules/mod_rewrite.so
  然后使用mod_rewrte的指令来配置URL重写规则。这些规则可以放在apache的全局配置文件内,也可以放在DokuWiki的根目录下的.htaccess文件内,事实上DokuWiki已经为了写好了这些规则放在.htaccess.dist中,内容如下:
  1. RewriteEngine on
  2.  
  3. RewriteBase /dokuwiki
  4.  
  5. RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
  6. RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
  7. RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
  8. RewriteRule ^$                        doku.php  [L]
  9. RewriteCond %{REQUEST_FILENAME}       !-f
  10. RewriteCond %{REQUEST_FILENAME}       !-d
  11. 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全局配置文件内加入
  1. <Directory /path/to/dokuwiki>
  2.    AllowOverride AuthConfig FileInfo Limit
  3. </Directory>
  如果上面这个配置还是不行,你可以尝试:
  1. AllowOverride All
  或者你就不用.htaccess文件,直接把这引规则放到apache的配置文件中如:
  1. <Directory /path/to/dokuwiki>
  2. RewriteEngine on
  3.  
  4. RewriteBase /dokuwiki
  5.  
  6. RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
  7. RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
  8. RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
  9. RewriteRule ^$                        doku.php  [L]
  10. RewriteCond %{REQUEST_FILENAME}       !-f
  11. RewriteCond %{REQUEST_FILENAME}       !-d
  12. RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
  13.    AllowOverride AuthConfig FileInfo Limit
  14. </Directory>
  然后重起apache。如果你收到“403 - Forbidden” 这样的错误,可能是由于FollowSymlinks option设置引起的。你可以添加:
  1. Options +FollowSymlinks
  2. RewriteEngine on
  其它的服务器就不讲了。

第二种方案是让DokuWiki来生成友好的URL


  首先设置
  1. $conf['userewrite'] = 2
  此外就不再需要设置服务器了。不过,它有依赖于apache服务器的CGI标准的PATH_INFO特性。不过使用apache的alias指令可能会使用DokuWiki不能使用。

  另外,使用这个方法有时候你仍然会碰见后面带有一个DokuWiki参数的URL,像下面这样
  1. http://example.com/example?DokuWiki=c81a95369a66576982119e2a60b557a5
  这个参数是PHP的会话ID,是PHP自动加上去的。它和URL重写无关。你可以通过配置强迫PHP使用cookie来处理会话来避免:
  1. session.use_only_cookies=1
  如果还是那样,你可以在php.ini中设置:
  1. session.use_trans_sid=0
  当然了,如果服务器的PHP是以模块形式安装到apache上的,如果你没有服务器的权限,你可以利用.htaccess来处理:
  1. php_flag session.use_only_cookies on
  2. php_flag session.use_trans_sid off
  将上面两个放到DokuWiki所在目录的.htaccess文件中。
  如果这两个方法都不行,那么你可以编辑conf/local.php。注意上面的php配置选项是不允许在运行时修改的,即不能使用ini_set()函数设置,所以只能设置url_rewriter.tags:
  1. ini_set('url_rewriter.tags''');

你可能感兴趣的:(apache,PHP,服务器,Cookies,url,.htaccess)