You're actually asking a fairly complicated question.
Here's a fairly complete answer. I hope it makes sense.
First, take a look at MSNBC's example.
MSNBC's pages are basically static html. Behind the scenes, there's a production system that sits on a database. It builds complete pages and pushes them out to the Web server farm.
The reason they are ASP pages is primarily to support dynamic placement of advertising. There's not a lot of ASP code involved; the content itself is not dynamically fetched. It would not make a lot of sense to hammer on a database repeatedly to generate the same story over and over. When you get to MSNBC's traffic levels (No. 1 news site on the net), that's a major concern.
The other type of URL you mention, the one with commas, is probably a Vignette StoryServer CURL (complex url).
Vignette's system works quite differently, but with cacheing as the primary aim.
It actually is more similar to PHP. It is an embedded scripting language (TCL) built into a server module, through NSAPI, ISAPI, or as an Apache module.
Vignette's system is a "pull-based cache." It can build pages dynamically, but most big sites would die under the resulting load, so it implements file-based caching.
A Vignette URL looks like this:
http://www.zdnet.com/products/stories/overview/0,8826,431172,00.html
0 means "this is OK to cache;" if the value is nonzero it means the page is always dynamic.
8826 is the unique identifier of a template that resides in a database and contains a mixture of HTML formatting and TCL code.
421172 is the unique identifier of an individual story in the story database.
00 is a flag for browser customization (rarely used).
Here's the trick: If a file named 0,8826,431172,00.html exists in the referenced directory, the Web server immediately serves it. StoryServer never gets involved.
If it is missing, StoryServer is invoked to handle the error condition (instead of generating a 404 page).
It reads the URL, fetches the template, passes it the story ID, processes the results, returns the page for the user, and writes 0,8826,431172,00.html into the filesystem so that the next guy doesn't have to query the database.
This method isn't exactly rocket science, and any idiot can do it. To prove it, I wrote a caching pageserver myself. A one-line change in httpd.conf is all that Apache requires to make it active.
(Vignette does have a patent on part of the system that involves browser or client customization, but as I pointed out, that's rarely used in the real world.)