Page is a not externally linkable
g1smd - 12:15 am on Dec 13, 2012 (gmt 0)
If there's only perhaps 20 or 30 URLs, then the list method as suggested by Lucy would be just fine.
If the list runs to hundreds, the database method is best.
There is another way, for numbers in between. It's very similar to the long method explained several posts back but with one big difference: instead of looking in the database to see if the requested pagename is good, instead maintain a list in an array.
The rest of the code around the array is just a few lines of PHP. Chuck it all in a special-script.php file and rewrite (that's rewrite, not redirect) URL requests for example.com/index.php/something to the internal special-script.php file. You'll also need to add the various exclusions to the htaccess redirects in the same way as explained in that previous post.
The special-script.php file returns a 301 redirect for page names listed in the array and the 404 status and error page for stuff not listed in the array.
I use both the array method and the database method: it depends on the size of the site and whether new URLs will need to be added to the list in the future. If the list is short and is static, then it's the array. If stuff needs to be added later or the list is long, then the database method always wins.
In getting your head round this lot, never think in terms of files on the server hard drive having URLs. Instead think of this in terms of requested URLs and mapping those requests to internal resources. Both mod_rewrite and Apache deal with URL requests made by browsers and bots.