I recently migrated from Trac (at http://recurser.com/trac/ ) to Redmine (at http://recurser.com/code/ ), and wanted the Trac links to redirect to the right place if possible. The nginx rules that follow achieve most of that. As always, there are a few catches:
- I’m not sure how well the wiki re-writing works, as i don’t really use the wiki much for personal stuff. Trac & Redmine might use a different format for naming pages. There’s only a few wiki pages that get any traffic, so i redirected them explicitly.
- Redmine doesn’t seem to support repositories with an underscore (’_’) in the name - i had to rename my repositories to use hyphens instead, & then add specific rewrite rules for those repositories.
- I haven’t had time to figure out how to rewrite comparisons of selected revisions yet (eg. if we’re now at revision 500, look at diffs for revision 200 vs revision 300). It should handle most simple cases though.
location /trac {
# Rename 'transmission' to 'clutch'
rewrite ^/trac/transmission/(.*)$ /trac/clutch/$1;
# Redmine doesn't support underscores in repository names - i renamed them with hyphens
rewrite ^/trac/open_gallery/(.*)$ /trac/open_gallery/$1;
rewrite ^/trac/project_ueler/(.*)$ /trac/project-ueler/$1;
rewrite ^/trac/scrabble_bot/(.*)$ /trac/scrabble-bot/$1;
# Clutch-specific wiki stuff gets a reasonable amount of traffic
rewrite ^/trac/clutch/wiki/FAQ(.*)$ /code/wiki/clutch/FAQ permanent;
rewrite ^/trac/clutch/wiki/GettingStarted(.*)$ /code/wiki/clutch/Getting_Started permanent;
rewrite ^/trac/clutch/wiki/About(.*)$ /code/wiki/clutch/About permanent;
rewrite ^/trac/clutch/wiki/Development(.*)$ /code/wiki/clutch/Development permanent;
# Specific revision of a file
rewrite ^/trac/([a-zA-Z0-9\-_]+)/browser/(.+) /code/repositories/entry/$1/$2 permanent;
# Select versions to diff
rewrite ^/trac/([a-zA-Z0-9\-_]+)/log/(.+) /code/repositories/changes/$1/$2 permanent;
# All reports
rewrite ^/trac/([a-zA-Z0-9\-_]+)/report(.*) /code/projects/$1/issues permanent;
# Source Browser
rewrite ^/trac/([a-zA-Z0-9\-_]+)/browser/? /code/repositories/browse/$1 permanent;
# Revisions
rewrite ^/trac/([a-zA-Z0-9\-_]+)/timeline(.*) /code/repositories/revisions/$1 permanent;
#Wiki
rewrite ^/trac/([a-zA-Z0-9\-_]+)/wiki(.*) /code/wiki/$1 permanent;
# Roadmap
rewrite ^/trac/([a-zA-Z0-9\-_]+)/roadmap(.*) /code/projects/gantt/$1 permanent;
# Tickets - ids won't necessarily match
rewrite ^/trac/([a-zA-Z0-9\-_]+)/ticket(.*) /code/projects/$1/issues permanent;
# Login
rewrite ^/trac/([a-zA-Z0-9\-_]+)/login(.*) /code/login permanent;
# Changeset for a specific file
rewrite ^/trac/([a-zA-Z0-9\-_]+)/changeset/([0-9]+)/(.+) /code/repositories/diff/$1/$3?rev=$2 permanent;
# Changeset
rewrite ^/trac/([a-zA-Z0-9\-_]+)/changeset/([0-9]+)/? /code/repositories/revision/$1?rev=$2 permanent;
# Project
rewrite ^/trac/([a-zA-Z0-9]+)/?(.*) /code/projects/show/$1 permanent;
# Trac Root
rewrite ^/trac(.*)$ /code/ permanent;
}
If you want to use these for Apache/mod_rewrite, you can probable change rewrite to RewriteRule , and change permanent to [R=301,L] , eg:
RewriteRule ^/trac(.*)$ /code/ [R=301,L]
I haven’t actually tried it with Apache though, so it might require a little tweaking.