$path = _collapse_dotdot($path);
        $path =~ s#/$##g;
        $path =~ s#^\./## if $dot_slash_added;
-       $path =~ s#^/##;
        $path =~ s#^\.$##;
        return $path;
 }
 
        my @parts;
        foreach my $part (split m{/+}, $uri_path) {
-               $part =~ s/([^~\w.%+-]|%(?![a-fA-F0-9]{2}))/sprintf("%%%02X",ord($1))/eg;
+               $part =~ s/([^!\$%&'()*+,.\/\w:=\@_`~-]|%(?![a-fA-F0-9]{2}))/sprintf("%%%02X",ord($1))/eg;
                push @parts, $part;
        }