通过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的链接不对,应该为:

https://dev.easymorse.com/trac/tutorials/browser/hibernate/tags/GetStart-1.0/src/main/resources/hibernate.cfg.xml

可结果是:

https://dev.easymorse.com/trac/tutorials/wiki/browser/hibernate/tags/GetStart-1.0/src/main/resources/hibernate.cfg.xml

多了一层目录,应该是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]
PDF下載    发送文章为PDF   

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply