====== Bugzilla ====== ===== Pretty URLs ===== Using Apache's mod_rewrite, it is possible to give Bugzilla pretty URLs for certain pages. * /assigned-to/me@example.com/ lists all bugs that are assigned to the specified email address * /reported-by/me@example.com/ lists all bugs that were reported by the specified email address * /new-bug/ redirects to the page listing all products to create a new bug report about * /new-bug/Product Name/ shows the form to create a new bug for the specified product * /graph/ shows our Open Bugs vs. Resolved Bugs graph * /open/ lists all open (new/assigned/etc.) bugs * /unassigned/ lists all unassiged (i.e. just the 'new' status) bugs * /fixed/ lists all fixed (resolved-fixed) bugs * /123/ shows bug #123 ==== .htaccess ==== The .htaccess (mod_rewrite) code needed to accomplish this is: {{File|.htaccess| RewriteEngine on #Need this because we're symlinked RewriteBase /bugs/ #And enter_bug.cgi?product=Foo -> /new-bug/Foo/ RewriteCond %{QUERY_STRING} ^product=([[A-Za-z0-9%\+\-_]]+)$ RewriteRule enter_bug\.cgi new-bug/%1/? [[L,R=301,NE]] #Move /new-bug/ to enter_bug.cgi (i.e. new-bug without a product specified) RewriteRule new-bug/?$ enter_bug.cgi [[L,R=301,NE]] #Alternative rules for POSTed forms RewriteCond %{REQUEST_URI} (post_bug|process_bug)\.cgi RewriteRule .+/(.+) $1 [[L,NE]] #Move show_bug.cgi?id=123 -> /123/ RewriteCond %{QUERY_STRING} ^id=([[0-9]]+)$ RewriteRule show_bug\.cgi %1/? [[L,R=301,NE]] #This fixes CSS/etc. and also permanently redirects link destinations (e.g. /assigned-to/foo@example.com/report.cgi to /report.cgi) RewriteRule (assigned-to|reported-by)/.+@[[a-zA-Z0-9\-\.]]+/(.+) $2 [[L,R=301,NE]] RewriteRule (new-bug)/[[^/]]+/(.+) $2 [[L,R=301,NE]] RewriteRule (open|unassigned|fixed|graph|[[0-9]]+)/(.+) $2 [[L,R=301,NE]] #Append a trailing slash if necessary RewriteRule (assigned-to|reported-by)/(.+@[[a-zA-Z0-9\-\.]]+)$ $1/$2/ [[L,R=301,NE]] RewriteRule (new-bug)/([[^/]]+)$ $1/$2/ [[L,R=301,NE]] RewriteRule (open|unassigned|fixed|graph|[[0-9]]+)$ $1/ [[L,R=301,NE]] #Make the actual assigned-to etc. URLs work RewriteRule assigned-to/(.+@[[a-zA-Z0-9\-\.]]+)/$ buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Product+One&product=Product+Two&product=Product+Three&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=exact&email1=$1&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Importance&field0-0-0=noop&type0-0-0=noop&value0-0-0= [[NE]] RewriteRule reported-by/(.+@[[a-zA-Z0-9\-\.]]+)/$ buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Product+One&product=Product+Two&product=Product+Three&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=MOVED&resolution=---&emailreporter1=1&emailtype1=exact&email1=$1&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= [[NE]] RewriteRule new-bug/(.+)/$ enter_bug.cgi?assigned_to=&blocked=&bug_file_loc=http\%3A\%2F\%2F&bug_severity=normal&bug_status=NEW&comment=&contenttypeentry=&contenttypemethod=autodetect&contenttypeselection=text\%2Fplain&data=&deadline=&dependson=&description=&estimated_time=0.0&form_name=enter_bug&maketemplate=Remember+values+as+bookmarkable+template&op_sys=All&priority=P3&product=$1&rep_platform=All&short_desc=&version= [[NE]] RewriteRule graph/$ chart.cgi?category=Sihnon&datefrom=&dateto=&label0=CURRENTLY_OPEN&label1=RESOLVED&line0=27&line1=5&name=24&subcategory=Hosts&action=wrap&width=1000&height=650 [[NE]] RewriteRule open/$ buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Product+One&product=Product+Two&product=Product+Three&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&resolution=WORKSFORME&resolution=---&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= [[NE]] RewriteRule unassigned/$ buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Product+One&product=Product+Two&product=Product+Three&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=UNCONFIRMED&bug_status=NEW&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= [[NE]] RewriteRule fixed/$ buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Product+One&product=Product+Two&product=Product+Three&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&deadlinefrom=&deadlineto=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&resolution=FIXED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= [[NE]] #The &dummy is needed to prevent the "show_bug.cgi?id=123 -> /123/" rule writing it BACK to /123/ RewriteRule ^([[0-9]]+)/?$ show_bug.cgi?id=$1&dummy [[L]] }} Note that in certain places the products need to be listed. These should be entered in the form "product=Product+One&product=Product+Two&product=Product+Three". Additionally, the /graph/ rule will need editing to match your own graph configuration. And finally, you only need the "RewriteBase" line if the URLs that you use to access Bugzilla don't match up with the filesystem - e.g. if you use a symlink to point Apache at the Bugzilla files.