Setting post_id for single.php based on URL without a redirect

I figured it out, here is the solution for anyone else wondering how to do something like this:

function force_ID($query) {
 global $wpdb;
 if (substr($_SERVER['REQUEST_URI'],-5) == '.html') {
    $post_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_name=%s AND post_status="publish"",substr(basename($_SERVER['REQUEST_URI']),0,-5)));
    if ($post_id > 0) $query->set('page_id',$post_id);
 }
}
add_action('pre_get_posts','force_ID');

In examining the wp-includes/query.php file, I noticed that the object accepts page_id to exclusively select an ID. Using post_id worked for archive post loops, but page_id worked for a single post call.