What I mean is probably best shown by example.
Say I have a site where Wordpress is installed in the root, acting primarily as a CMS, not as a blog site (although actually this really has no bearing on this request). Or IOW its primary purpose is to serve pages, not posts.
For illustration I also have a subdirectory /nonwp (under the root) which contains static HTML files not managed by Wordpress (this works because the .htaccess rewrite rules test for file/directories that exist before passing to index.php)
The site's home page http://mysite/ is a page, not a list of posts, thus using the new feature of #2515 to set a front page thus:
get_option('show_on_front') == 'page'
get_option('page_on_front') == '/home' (well, the page id of it)
get_option('page_for_posts') == '/blog' (page id again)
So depending on the URL visited:
http://mysite/ -> the "front" page
http://mysite/home/ -> also the "front" page (identical
http://mysite/about/ -> another page
http://mysite/blog/ -> posts page
http://mysite/nonwp/index.html -> these files actually exist, so the .htaccess rewrite rules don't pass on to wordpress
But what about these URLs?
http://mysite/thisdoesnotexist/
http://mysite/about/notexist/
http://mysite/nonwp/notexist.html
As it stands these will all display POSTS. This is highly undesirable. I want it to show some kind of '404' page. At worst it should show the 'front' page as per #2515
The administration side of this would be pretty simple - add get_option( 'page_for_bad_url' ) == page id, or something (this could be the posts page, could be the front page, could be 'none'. With the appropriate editing in wp-admin/options_reading.php.
The engine side is a bit harder. The code in query.php is pretty hairy, and I can't work out exactly how to patch this, someone with familiarity of the code might be able to suggest.
I was thinking something along these lines ..
$request = " SELECT ... FROM $wpdb->posts ...";
...
$this->posts = $wpdb->get_results($this->request);
if( count($this->posts) == 0 and get_option('404_page') )
{
page_id = get_option('404_page')
go back and try querying again
}
Of course it isn't quite that simple