PMWiki CleanURLs with Lighttpd

Rewriting for PMWiki isn't very difficult at all.

Dedicated vhost

A vhost of is used in this example. Add this snippet to your lighttpd.conf, after enabling mod_rewrite.

$HTTP["host"] == "" {   
  index-file.names = ("pmwiki.php")
  url.rewrite-once = (
    "^/([a-zA-Z0-9]+)/([a-zA-Z=?0-9.&:\-_%]+)$" => "/pmwiki.php?n=$1.$2",
    "^/([a-zA-Z0-9/]+)$" => "/pmwiki.php?n=Category.$1" 

I have this code setup to redirect any one-level inquiries ( to Category.$1. You can change that easily, and make it $1.$1 or Main.$1, whatever you want. (blaster8: I have found that to make all of the links with the 'lean' skin sane, the option $1.HomePage is the best replacement for Category.$1)

Now, change your config variables in config.php to the following:

$EnablePathInfo = 1;
$ScriptUrl = "";
$PubDirUrl = "";


To set up a wiki in ` instead of @`, perform the following steps:

Put the following in PMWiki's config.php:

$EnablePathInfo = 1;
$ScriptUrl = "";
$PubDirUrl = "";

Put this in Lighttpd's lighttpd.conf:

url.rewrite-once = (
    "^/wiki/([a-zA-Z0-9]+)/([a-zA-Z=?0-9.&:\-_%]+)$" => "/wiki/pmwiki.php?n=$1.$2",
    "^/wiki/([a-zA-Z0-9/]+)$" => "/wiki/pmwiki.php?n=Category.$1" 

Create a file called index.php with the following contents in the same directory as pmwiki.php:

<?php require("pmwiki.php"); ?>

`url.rewrite` rules

The regular expressions used above can also be rewritten to a single rule:

url.rewrite-once = ("^/([A-Z].*)" => "/pmwiki.php?n=$1")

This lets the pmwiki.php script handle any URL that starts with a capital letter. If your wiki conforms to the de facto pmwiki standards, this should be enough.

Updated by gstrauss over 2 years ago · 13 revisions