# Based on http://www.clearchain.com/blog/posts/cgit-upgrade-gitweb-retired # # Redirects mapping gitweb -> cgit # # Gitweb uses get targets seperated by ; # # /?...;...;... # # p = Project # a = Action like ( # blob, # blob_plain, # commitdiff, # commit, # history, # log, # rss|atom, # shortlog, # summary, # tag, # tree, # snapshot # ) # h = SHA Hash # hb= SHA Hash Tree Base # f= file/dir # sf= snapshot format # # Cgit uses the following: # # /project/action/?... # # action ( commit, log, diff, tree, tag, patch ) # # id = SHA Hash # id2 = SHA Hash # h = head # # Translation rules # # Project is a straight redirect # --- # /?p=(.+)\.git; /$1/ # # Action requires a mapping # --- # a=(blob|tree) /tree/ # a=(blobdiff|commitdiff) /diff/ # a=commit /commit/ # a=(summary) / # a=(shortlog|log|history) /log/ # a=tag /tag/ # a=blob_plain /blob/ # a=rss|atom /atom # # Targets require mapping # --- # h=(.+) id=$1 # f=(.+) /$1 # hb=(.+) id2=$1 # # Now putting it all together # RewriteEngine On # blob RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;h=([^;]+);hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/tree/%5?id=%3;id2=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;f=([^;]+);h=([^;]+);hb=([^;]+) RewriteRule ^/$ /%1.git/tree/%3?id=%4;id2=%5 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/tree/%4?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;f=([^;]+) RewriteRule ^/$ /%1.git/tree/%3 [R=permanent,L,NE,QSD] # tree RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;h=([^;]+);hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/tree/%5?id=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/tree/%4?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;h=([^;]+);hb=([^;]+) RewriteRule ^/$ /%1.git/tree/?id=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;hb=([^;]+) RewriteRule ^/$ /%1.git/tree/?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree RewriteRule ^/$ /%1.git/tree/? [R=permanent,L,NE,QSD] # commitdiff RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blobdiff;h=([^;]+);hp=([^;]+);hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/diff/%6?id2=%4;id=%3;id3=%5 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commitdiff;h=([^;]+);hp=([^;]+) RewriteRule ^/$ /%1.git/diff/?id=%4;id2=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commitdiff;h=([^;]+) RewriteRule ^/$ /%1.git/diff/?id=%3 [R=permanent,L,NE,QSD] # commit RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commit;h=([^;]+) RewriteRule ^/$ /%1.git/commit/?id=%3 [R=permanent,L,NE,QSD] # shortlog RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=shortlog;h=([^;]+) RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=shortlog RewriteRule ^/$ /%1.git/log/? [R=permanent,L,NE,QSD] # log RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=log;h=([^;]+) RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=log RewriteRule ^/$ /%1.git/log [R=permanent,L,NE,QSD] # history RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;h=([^;]+);hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/log/%5?id=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;f=([^;]+);h=([^;]+);hb=([^;]+) RewriteRule ^/$ /%1.git/log/%3?id=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;f=([^;]+);h=([^;]+) RewriteRule ^/$ /%1.git/log/%3?id=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;h=([^;]+);hb=([^;]+) RewriteRule ^/$ /%1.git/log/?id=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;hb=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/log/%4?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;hb=([^;]+) RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD] # tag RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tag;h=([^;]+) RewriteRule ^/$ /%1.git/tag/?id=%4 [R=permanent,L,NE,QSD] # blob_plain RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;h=([^;]+);f=([^;]+) RewriteRule ^/$ /%1.git/blob/%4?id=%3 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;f=([^;]+);hb=([^;]+) RewriteRule ^/$ /%1.git/plain/%3?id2=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;f=([^;]+) RewriteRule ^/$ /%1.git/plain/%3 [R=permanent,L,NE,QSD] # rss|atom RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=(rss|atom);h=refsheads/([^;]+) RewriteRule ^/$ /%1.git/atom?h=%4 [R=permanent,L,NE,QSD] RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=(rss|atom) RewriteRule ^/$ /%1.git/atom [R=permanent,L,NE,QSD] # snapshot RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=snapshot;h=([^;]+);sf=([^;]+) RewriteRule ^/$ /%1.git/snapshot/%3.tar.gz [R=permanent,L,NE,QSD] # summary RewriteCond %{QUERY_STRING} p=([^;]+)(\.git)(;a=summary)?$ RewriteRule ^/$ /%1 [R=permanent,L,NE,QSD] # Failsafes in case nothing above matches, # try at least to put the person in the project, else root of cgit RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?.* RewriteRule ^/$ /%1 [R=temp,L,NE,QSD] RewriteCond %{QUERY_STRING} .+ RewriteRule ^/.+ / [R=temp,L,NE,QSD]