Lighttpd ModRewrite pour Drupal, Wordpress, Dotclear et Zenphoto

Publié le 22 août 2008 par Bonvga

Durant la migration sur Lighttpd, outre l'installation de php5 en fastcgi, j'ai du revoir l'ensemble des règles de rewrite des mes sites. Voici quelques règle de réécriture Lighttpd pour quelques application web.

Drupal 6

$HTTP["host"] =~ "(^|\.)foo\.bar$" {
  url.rewrite-once = (
   "^/(files/.*)$" => "/$1",
   "^/system/test/(.*)$" => "/index.php?q=system/test/$1",
   "^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
   "^/([^.?]*)$" => "/index.php?q=$1",
   "^/search/(.*)$" => "/index.php?q=search/$1",
   "^/(.*).xml$" => "/index.php?q=$1.xml"
   "^/([^.?]*\.html)$" => "/index.php?q=$1",
   "^/([^.?]*\.htm)$" => "/index.php?q=$1"
  )
  url.access-deny = ( "~", ".inc", ".engine", ".install", ".module", ".sh", "sql", ".theme", ".tpl.php", ".xtmpl", "Entries", "Repository", "Root" )
}

La base vient de ce site mais j'ai apporté quelques modifications pour gérer le sitemap.xml entre autre.

Normalement ces règles doivent fonctionner sur Drupal 5, mais si vous avez quand même des problèmes, j'ai testé avec succès la solution ci-dessous.

Drupal 5

$HTTP["host"] =~ "(^|\.)foo\.bar$" {
  index-file.names = ( "index.php" )
  magnet.attract-physical-path-to = ( "/etc/lighttpd/drupal.lua" )
  url.access-deny = ( "~", ".inc", ".engine", ".install", ".module", ".sh", "sql", ".theme", ".tpl.php", ".xtmpl", "Entries", "Repository", "Root" )
}

j'ai trouvé cette manière de procéder ici.

Cette règle utilise un fichier 'drupal.lua' d'on voici le contenu :

attr = lighty.stat(lighty.env["physical.path"])
if (not attr) then
  lighty.env["uri.query"] = "q=" .. lighty.env["uri.path"]
  lighty.env["uri.path"] = "/index.php"
  lighty.env["physical.rel-path"] = lighty.env["uri.path"]
  lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
end

Wordpress

$HTTP["host"] =~ "(^|\.)foo\.bar$" {
  url.rewrite = (
   "^/(wp-.+).*/?" => "$0",
   "^/(sitemap.xml)" => "$0",
   "^/(xmlrpc.php)" => "$0",
   "^/(.+)/?$" => "/index.php/$1"
  )
}

J'ai trouvé cette règle sur ce site.

Dotclear

$HTTP["host"] =~ "(^|\.)foo\.bar$" {
  url.rewrite = (
   "^/blog/[0-9]{4}/[0-9]{2}/?$" => "/blog/index.php/$1/$2",
   "^/blog/[0-9]{4}/[0-9]{2}/[0-9]{2}/?$" => "/blog/index.php/$1/$2/$3",
   "^/blog/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.+)$" => "/blog/index.php/$1/$2/$3/$4",
   "^/blog/([A-Z][A-Za-z0-9_-]*)/?$" => "/blog/index.php/$1",
   "^/blog/([A-Z][A-Za-z0-9_-]*)/[0-9]{4}/?$" => "/blog/index.php/$1/$2",
   "^/blog/([A-Z][A-Za-z0-9_-]*)/[0-9]{4}/[0-9]{2}/?$" => "/blog/index.php/$1/$2/$3",
   "^/blog/([A-Z][A-Za-z0-9_-]*)/[0-9]{4}/[0-9]{2}/[0-9]{2}/?$" => "/blog/index.php/$1/$2/$3/$4",
   "^/blog/([a-z]{2}(-[a-z]{2})?)$" => "blog/index.php/lang=$1",
   "^/blog/ecrire/(.+)?$" => "blog/ecrire/$1",
   "^/blog/tag/(.+)?$" => "blog/index.php/tag/$1"
  )
}

Cette règle provient de ce site.

Zenphoto

$HTTP["host"] =~ "(^|\.)foo\.bar$" {
  var.zendir = "/"
  url.rewrite-once = (
   "^"+zendir+"admin/?$" => "$0",
   "^("+zendir+"(albums|cache|themes|zp-core).*)$" => "$1",
   "^("+zendir+"\?.*)" => "$1",
   "^("+zendir+"[a-z]+.php(\?.*)?)$" => "$1",
   "^"+zendir+"page/([0-9]+)/?$" => zendir+"index.php?page=$1",
   "^"+zendir+"page/([A-Z]a-z0-9\-_]+)/?$" => zendir+"index.php?p=$1",
   "^"+zendir+"(.*)/page/([0-9]+/)?$" => zendir+"index.php?album=$1&page=$2",
   "^"+zendir+"page/([A-Za-z0-9\-_]+)/([A-Za-z0-9\-_]+)/?$" => zendir+"index.php?p=$1&words=$2",
   "^"+zendir+"page/([A-Za-z0-9\-_]+)/([A-Za-z0-9\-_]+)/([0-9]+)/?$" => zendir+"index.php?p=$1&words=$2&page=$3",
   "^"+zendir+"page/([A-Za-z0-9\-_]+)/archive/([A-Za-z0-9\-_]+)/?$" => zendir+"index.php?p=$1&date=$2",
   "^"+zendir+"page/([A-Za-z0-9\-_]+)/archive/([A-Za-z0-9\-_]+)/([0-9]+)/?$" => zendir+"index.php?p=$1&date=$2&page=$3",
   "^"+zendir+"(.*)/image/(thumb|[0-9]{1,4})/([^/\\]+)$" => zendir+"zp-core/i.php?a=$1&i=$3&s=$2",
   "^"+zendir+"(.*)/image/([^/\\]+)$" => zendir+"zp-core/i.php?a=$1&i=$2",
   "^"+zendir+"(.*)/?$" => zendir+"index.php?album=$1",
  )
}

J'ai trouvé ces règles sur le site officiel de Zenphoto.

Évidement, jetez aussi un œil à la documentation de ModRewrite de Lighttpd pour plus d'informations.