@@ -53,20 +53,19 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult<Response> {
5353 if let Some ( path) = path_in_crate {
5454 queries. insert ( "search" . into ( ) , path. into ( ) ) ;
5555 }
56- let url : iron :: url :: Url = req. url . clone ( ) . into ( ) ;
57- let query_pairs = url . query_pairs ( ) ;
58- queries . extend ( query_pairs ) ;
59- let url = if queries . is_empty ( ) {
60- ctry ! ( req, iron :: url :: Url :: parse ( & url_str ) )
61- } else {
62- ctry ! ( req , iron :: url :: Url :: parse_with_params ( & url_str , queries ) )
63- } ;
56+ queries . extend ( req. url . as_ref ( ) . query_pairs ( ) ) ;
57+ let url = ctry ! (
58+ req ,
59+ Url :: from_generic_url ( ctry! (
60+ req,
61+ iron :: url :: Url :: parse_with_params ( & url_str , queries )
62+ ) )
63+ ) ;
6464 let ( status_code, max_age) = if permanent {
6565 ( status:: MovedPermanently , 86400 )
6666 } else {
6767 ( status:: Found , 0 )
6868 } ;
69- let url = ctry ! ( req, Url :: from_generic_url( url) ) ;
7069 let mut resp = Response :: with ( ( status_code, Redirect ( url) ) ) ;
7170 resp. headers
7271 . set ( CacheControl ( vec ! [ CacheDirective :: MaxAge ( max_age) ] ) ) ;
@@ -866,8 +865,8 @@ mod test {
866865 "/dummy/0.3.0/all.html" ,
867866 web,
868867 ) ?;
869- assert_redirect ( "/dummy/0.3.0/" , base, web) ?;
870- assert_redirect ( "/dummy/0.3.0/index.html" , base, web) ?;
868+ assert_redirect ( "/dummy/0.3.0/" , & format ! ( "{}?" , base) , web) ?;
869+ assert_redirect ( "/dummy/0.3.0/index.html" , & format ! ( "{}?" , base) , web) ?;
871870 Ok ( ( ) )
872871 } ) ;
873872 }
@@ -1184,7 +1183,7 @@ mod test {
11841183 . create ( ) ?;
11851184
11861185 let web = env. frontend ( ) ;
1187- assert_redirect ( "/fake%2Dcrate" , "/fake-crate/latest/fake_crate/" , web) ?;
1186+ assert_redirect ( "/fake%2Dcrate" , "/fake-crate/latest/fake_crate/? " , web) ?;
11881187
11891188 Ok ( ( ) )
11901189 } ) ;
@@ -1214,37 +1213,37 @@ mod test {
12141213
12151214 let web = env. frontend ( ) ;
12161215
1217- assert_redirect ( "/dummy_dash" , "/dummy-dash/latest/dummy_dash/" , web) ?;
1218- assert_redirect ( "/dummy_dash/*" , "/dummy-dash/0.2.0/dummy_dash/" , web) ?;
1219- assert_redirect ( "/dummy_dash/0.1.0" , "/dummy-dash/0.1.0/dummy_dash/" , web) ?;
1216+ assert_redirect ( "/dummy_dash" , "/dummy-dash/latest/dummy_dash/? " , web) ?;
1217+ assert_redirect ( "/dummy_dash/*" , "/dummy-dash/0.2.0/dummy_dash/? " , web) ?;
1218+ assert_redirect ( "/dummy_dash/0.1.0" , "/dummy-dash/0.1.0/dummy_dash/? " , web) ?;
12201219 assert_redirect (
12211220 "/dummy-underscore" ,
1222- "/dummy_underscore/latest/dummy_underscore/" ,
1221+ "/dummy_underscore/latest/dummy_underscore/? " ,
12231222 web,
12241223 ) ?;
12251224 assert_redirect (
12261225 "/dummy-underscore/*" ,
1227- "/dummy_underscore/0.2.0/dummy_underscore/" ,
1226+ "/dummy_underscore/0.2.0/dummy_underscore/? " ,
12281227 web,
12291228 ) ?;
12301229 assert_redirect (
12311230 "/dummy-underscore/0.1.0" ,
1232- "/dummy_underscore/0.1.0/dummy_underscore/" ,
1231+ "/dummy_underscore/0.1.0/dummy_underscore/? " ,
12331232 web,
12341233 ) ?;
12351234 assert_redirect (
12361235 "/dummy-mixed_separators" ,
1237- "/dummy_mixed-separators/latest/dummy_mixed_separators/" ,
1236+ "/dummy_mixed-separators/latest/dummy_mixed_separators/? " ,
12381237 web,
12391238 ) ?;
12401239 assert_redirect (
12411240 "/dummy_mixed_separators/*" ,
1242- "/dummy_mixed-separators/0.2.0/dummy_mixed_separators/" ,
1241+ "/dummy_mixed-separators/0.2.0/dummy_mixed_separators/? " ,
12431242 web,
12441243 ) ?;
12451244 assert_redirect (
12461245 "/dummy-mixed-separators/0.1.0" ,
1247- "/dummy_mixed-separators/0.1.0/dummy_mixed_separators/" ,
1246+ "/dummy_mixed-separators/0.1.0/dummy_mixed_separators/? " ,
12481247 web,
12491248 ) ?;
12501249
0 commit comments