Utiliser MoinMoin avec lighttpd 1.4.19
Lorsqu'il fonctionne via FastCGI ou SCGI, MoinMoin utilise la variable d'environnement PATH_INFO1 fournie par le serveur HTTP pour déterminer quelle page il doit afficher.
Dans le cas d'un wiki placé à la racine d'un site (/), la variable PATH_INFO fournie par lighttpd 1.4.19 via FLUP est fausse2.
Les symptômes de ce problème sont les suivants :
Lorsque l'on clique une première fois sur un lien (LienUn), ce lien est bien pris en compte dans la barre d'URL (http://monsite.invalid/LienUn), mais on reste sur la même page.
Lorsque l'on clique sur un second lien (LienDeux), la page correspondante s'affiche, mais l'URL affichée contient les deux liens (http://monsite.invalid/LienUn/LienDeux).
Solution propre : utiliser une version plus récente de lighttpd
Cette solution est la seule qui fonctionne avec MoinMoin 1.9.
À partir de lighttpd 1.4.23, l'option fix-root-scriptname permet de corriger ce problème. Par exemple :
fastcgi.server = ( "/" =>
((
"host" => "127.0.0.1",
"port" => 45999,
"check-local" => "disable",
"fix-root-scriptname" => "enable",
))
)Cette option marche pour SCGI et FastCGI.
Solution propre : le script fixers.py de l'équipe Werkzeug
Merci à Thomas Waldmann de m'avoir suggéré cette solution.
Téléchargez le script fixers.py depuis http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/contrib/fixers.py.
Recopiez le script fixers.py à côté de votre script moin_flup_wsgi.py.
Modifiez le script moin_flup_wsgi.py pour qu'il utilise la fonction LighttpdCGIRootFix de fixers.py :
--- moin_flup_wsgi.py 2009-01-07 00:26:55.000000000 +0000 +++ moin_flup_wsgi.py.revu 2009-03-02 19:28:19.000000000 +0000 @@ -41,6 +41,7 @@ from flup.server.fcgi import WSGIServer from MoinMoin.server.server_wsgi import moinmoinApp, WsgiConfig +from fixers import LighttpdCGIRootFix class Config(WsgiConfig): pass @@ -48,7 +49,7 @@ config = Config() if __name__ == '__main__': - server = WSGIServer(moinmoinApp, bindAddress=unixSocketPath) + server = WSGIServer(LighttpdCGIRootFix(moinmoinApp), bindAddress=unixSocketPath) server.run() os.unlink(unixSocketPath)Compilez ces 2 scripts avec py_compilefiles :
py_compilefiles *.py
Relancez MoinMoin.
Solution bidouille : correctif MoinMoin
La modification ci-dessous permet de corriger les valeurs fournies par lighttpd. Elle n'est applicable qu'à ce cas particulier.
--- MoinMoin/request/__init__.py.original 2009-02-17 23:04:03.000000000 +0000
+++ MoinMoin/request/__init__.py 2009-02-17 23:04:52.000000000 +0000
@@ -414,8 +414,8 @@
self.server_name = env.get('SERVER_NAME', self.server_name)
self.server_port = env.get('SERVER_PORT', self.server_port)
self.saved_cookie = env.get('HTTP_COOKIE', '')
- self.script_name = env.get('SCRIPT_NAME', '')
- self.path_info = env.get('PATH_INFO', '')
+ self.script_name = ''
+ self.path_info = env.get('SCRIPT_NAME', '') + env.get('PATH_INFO', '')
self.query_string = env.get('QUERY_STRING', '')
self.request_method = env.get('REQUEST_METHOD', None)
self.remote_addr = env.get('REMOTE_ADDR', '')