Philosophically speaking, pages do not "exist". When you put books or papers on your bookshelf, they stay there. They have some separate existence on that shelf. However, a page exists only so long as it is hosted on some computer that is turned on and able to provide it on demand. The page can, of course, be always generated on the fly, so it doesn't need to have any special existence prior to your request.
Now think about it from the point of view of the server. Let's assume it is, say, properly configured Apache --- not a one-line python server just mapping all requests to the file system. Then the particular path specified in the URL may have nothing to do with the location of a particular file in the filesystem. So, once again, a page does not "exist" in any clear sense. Perhaps you request http://some.url/products/intel.html
, and you get a page; then you request http://some.url/products/bigmac.html
, and you see nothing. It doesn't mean that there is one file but not the other. You may not have permissions to access the other file, so the server returns 404, or perhaps bigmac.html
was to be served from a remote Mc'Donalds server, which is temporarily down.
What I am trying to explain is, 404
is just a number. There is nothing special about it: it could have been 40404
or -2349.23847
, we've just agreed to use 404
. It means that the server is there, it communicates with you, it probably understood what you wanted, and it has nothing to give back to you. If you think it is appropriate to return 404
for http://some.url/products/bigmac.html
when the server decides not to serve the file for whatever reason, then you might as well agree to return 404
for http://some.url/products?id=bigmac
.
Now, if you want to be helpful for users with a browser who are trying to manually edit the URL, you might redirect them to a page with the list of all products and some search capabilities instead of just giving them a 404
--- or you can give a 404
as a code and a link to all products. But then, you can do the same thing with http://some.url/products/bigmac.html
: automatically redirect to a page with all products.