I would cheat and hide the page block I don't want with CSS ;) It's not a clever Apex'y solution but it takes care of sooo much stuff (objects and lists the user is not supposed to see, page layout consistent with his profile and selected record type etc.)
Start with page like this:
<apex:page id="page" showHeader="false" readonly="true">
<apex:pageMessage severity="error" strength="2" rendered="{!ISBLANK($CurrentPage.parameters.id)}"
summary="Id not passed" />
<apex:detail id="detail" subject="{!$CurrentPage.parameters.id}"
title="false" showChatter="false" relatedListHover="false"/>
</apex:page>
Inspect the created HTML, you should see something similar to this:
I'd just go and hide the div
's responsible for the "detail" part. I've decided to do it by the element's Id:
<apex:page id="page" showHeader="false" readonly="true">
<style>
div#ep_page_detail{
display:none;
}
</style>
<apex:pageMessage severity="error" strength="2" summary="Id not passed" rendered="{!ISBLANK($CurrentPage.parameters.id)}" />
<apex:detail id="detail" subject="{!$CurrentPage.parameters.id}"
title="false" showChatter="false" relatedListHover="false"/>
</apex:page>
You might want to do it by class of that div or maybe classes of all child divs... Both options can break if SF changes the class names / method of the id generation. It's unlikely but just keep that in mind.
A more secure way to be sure the we know the Id that was generated would be to use the $Component
global variable but it wasn't producing the right results when I've used {!$Component.detail}
...