} elsif ($path_info =~ m!$LISTNAME_RE/f/(\S+)\.html\z!o) {
invalid_list_mid(\%ctx, $1, $2) || get_full_html(\%ctx, $cgi);
- # convenience redirect
+ # convenience redirects, order matters
} elsif ($path_info =~ m!$LISTNAME_RE/(?:m|f)/(\S+)\z!o) {
invalid_list_mid(\%ctx, $1, $2) || redirect_mid(\%ctx, $cgi);
my $x = mid2blob($ctx);
return r404() unless $x;
- my $pfx = "../f/" . uri_escape($ctx->{mid}) . ".html";
require PublicInbox::View;
+ my $mid_href = PublicInbox::View::ascii_html(uri_escape($ctx->{mid}));
+ my $pfx = "../f/$mid_href.html";
require Email::MIME;
[ "200 OK", {'Content-Type' => 'text/html'},
PublicInbox::View->as_html(Email::MIME->new($$x), $pfx)];