@@ -53,20 +53,19 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult<Response> {
53
53
if let Some ( path) = path_in_crate {
54
54
queries. insert ( "search" . into ( ) , path. into ( ) ) ;
55
55
}
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
+ ) ;
64
64
let ( status_code, max_age) = if permanent {
65
65
( status:: MovedPermanently , 86400 )
66
66
} else {
67
67
( status:: Found , 0 )
68
68
} ;
69
- let url = ctry ! ( req, Url :: from_generic_url( url) ) ;
70
69
let mut resp = Response :: with ( ( status_code, Redirect ( url) ) ) ;
71
70
resp. headers
72
71
. set ( CacheControl ( vec ! [ CacheDirective :: MaxAge ( max_age) ] ) ) ;
@@ -866,8 +865,8 @@ mod test {
866
865
"/dummy/0.3.0/all.html" ,
867
866
web,
868
867
) ?;
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) ?;
871
870
Ok ( ( ) )
872
871
} ) ;
873
872
}
@@ -1184,7 +1183,7 @@ mod test {
1184
1183
. create ( ) ?;
1185
1184
1186
1185
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) ?;
1188
1187
1189
1188
Ok ( ( ) )
1190
1189
} ) ;
@@ -1214,37 +1213,37 @@ mod test {
1214
1213
1215
1214
let web = env. frontend ( ) ;
1216
1215
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) ?;
1220
1219
assert_redirect (
1221
1220
"/dummy-underscore" ,
1222
- "/dummy_underscore/latest/dummy_underscore/" ,
1221
+ "/dummy_underscore/latest/dummy_underscore/? " ,
1223
1222
web,
1224
1223
) ?;
1225
1224
assert_redirect (
1226
1225
"/dummy-underscore/*" ,
1227
- "/dummy_underscore/0.2.0/dummy_underscore/" ,
1226
+ "/dummy_underscore/0.2.0/dummy_underscore/? " ,
1228
1227
web,
1229
1228
) ?;
1230
1229
assert_redirect (
1231
1230
"/dummy-underscore/0.1.0" ,
1232
- "/dummy_underscore/0.1.0/dummy_underscore/" ,
1231
+ "/dummy_underscore/0.1.0/dummy_underscore/? " ,
1233
1232
web,
1234
1233
) ?;
1235
1234
assert_redirect (
1236
1235
"/dummy-mixed_separators" ,
1237
- "/dummy_mixed-separators/latest/dummy_mixed_separators/" ,
1236
+ "/dummy_mixed-separators/latest/dummy_mixed_separators/? " ,
1238
1237
web,
1239
1238
) ?;
1240
1239
assert_redirect (
1241
1240
"/dummy_mixed_separators/*" ,
1242
- "/dummy_mixed-separators/0.2.0/dummy_mixed_separators/" ,
1241
+ "/dummy_mixed-separators/0.2.0/dummy_mixed_separators/? " ,
1243
1242
web,
1244
1243
) ?;
1245
1244
assert_redirect (
1246
1245
"/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/? " ,
1248
1247
web,
1249
1248
) ?;
1250
1249
0 commit comments