通过mod_rewrite解决trac源代码宏的bug
trac在使用中一直很正常,除了响应速度慢一点儿外。最近写的trac wiki文档,开始通过/来设置wiki的父子关系。比如/Hibernate编写的是hibernate总的目录wiki页面,/Hibernate/GetStart是其子wiki页面。网站在这里:
https://dev.easymorse.com/trac/tutorials/wiki/Hibernate/GetStart
在页面中使用了trac的宏IncludeSource,见安装trac插件IncludeSourcePartial。使用是正常的,但是到trac svn browser的链接不对,应该为:
可结果是:
多了一层目录,应该是browser目录,结果browser目录被生成到wiki目录下了。查看了源代码,发现是该宏的bug,作者可能认为不应出现使用/来表示父子wiki的问题,是通过../来返回上级相对路径,源代码片段见:
if kwargs.has_key('header'): header = kwargs.get('header') # user specified header else: href = '../browser/%s%s' % (orig_file_name, make_rev_str(rev)) header = tag.a(file_name, href=href)
源文件见:
http://trac-hacks.org/browser/includesourcepartialplugin/0.11/includesource/IncludeSource.py
可以通过改写该宏代码解决问题,但这样以后每次升级trac,都需要使用自定义的includeSource插件,比较麻烦。
使用apache的mod_rewrite模块,将所有*wiki/browser*链接重定向到*browser*,可简单配置如下:
RewriteEngine On RewriteRule ^/trac/([^/]*)/wiki/[^/]+/browser(.*) /trac/$1/browser$2 [R]
这篇文章上的评论的 RSS feed TrackBack URI