Use two different index pages

You can’t set DirectoryIndex to prototype.php and expect everything else to work correctly. DirectoryIndex is not just a “landing page”. A lot of requests go through that file.

I think you are making this more complicated than it needs to be.

  1. Put your code for prototype.php into a WordPress custom theme
    template file
    .
  2. Create a page that uses that file as the template
  3. Set that page as the static front page.

That lets you keep everything inside WordPress so you can do things like track whether a user is logged in and whether that user has filled out the form, and redirect away from the page if so. And you don’t need to mess with rewriting at all.

There is another similar but mostly opposite approach.

Don’t try to rewrite anything and let WordPress operate as normal.
But use the template_redirect hook to check for user logged in status and to check if the user has filled in the form, and conditionally redirect to your form.

function redirect_to_prototypephp_wpse_101519() {
  $redir = true;
  if (is_user_logged_in()) {
    global $current_user;
    get_currentuserinfo();
    $filled_form = get_user_meta($user_id, '_prototype_form', true);
    if (true == $filled_form) {
      $redir = false;
    }
  }
  if (true === $redir) {
    wp_redirect('http://your-url/URL/to/prototype.php');
  }
}
add_action('template_redirect','redirect_to_prototypephp_wpse_101519');

This also allows you to use core WordPress functions but in a different way. The only additional component would be the need to set the _prototype_form usermeta key when the prototype.php form is submitted.