+  my $new_virtual = $data->{'new_virtual'};
+  my $dir         = upper_path($new_virtual);
+  $new_virtual    = encode_entities($new_virtual);
+
+  if(-e $new_physical)
+  {
+   return error($config->{'err_exist_edited'},$dir,{FILE => $new_virtual}) if($data->{'uselist'}->in_use($data->{'new_virtual'}));
+
+   if(-d $new_physical)
+   {
+    return error($config->{'err_dircopy'});
+   }
+   elsif(not $data->{'cgi'}->param('confirmed'))
+   {
+    my $tpl = new Template;
+    $tpl->read_file($config->{'tpl_confirm_replace'});
+
+    $tpl->fillin("FILE",$virtual);
+    $tpl->fillin("NEW_FILE",$new_virtual);
+    $tpl->fillin("NEW_FILENAME",file_name($new_virtual));
+    $tpl->fillin("NEW_DIR",$dir);
+    $tpl->fillin("DIR",upper_path($virtual));
+    $tpl->fillin("COMMAND","rename");
+    $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
+    $tpl->fillin("SCRIPT",$script);
+
+    my $output = header(-type => "text/html");
+    $output   .= $tpl->get_template;
+
+    return \$output;
+   }
+  }
+
+  rename($physical,$new_physical) or return error($config->{'err_rename_failed'},upper_path($virtual),{FILE => $virtual, NEW_FILE => $new_virtual});
+  return devedit_reload({command => 'show', file => $dir});