I typically don't recommend catch-alls, but I also understand why one may want to control it pragmatically where they feel they have better control over the processing versus creating different handler files and having apache capture the data and give it to the appropriate handler. Two different methods that ultimately achieve the same end goal.

The above should capture the information and pass it into the id variable.

It's ALWAYS dangerous to use (.) BECAUSE it does capture EVERYTHING (or NOTHING) so any hiccup in your website will be caused by this inappropriate use of (.). This is explained in my signature's tutorial as well as ways to correctly specify what you WANT to match ('hello' in this case).

The {REQUEST_FILENAME} lines were looking to NOT match a file (!-f), directory (!-d) or symbolic link (!-l). I have no idea why you'd want to involve a symbolic link but ... well, the other two are fine for the generic case (where you have no idea what the URI will be).

The {REQUEST_URI} used to exclude index\.php was used to escape from the infinite loop of the :kaioken: EVERYTHING :kaioken: atom, (.). Of course, as you add images and scripts, they'll have to be added to the list of excluded files (surprise! That's why you should NEVER use (.) unless you actually know what you're doing.

Kudos to cp for showing you how to create Apache variables (using the parenthetical in a mod_rewrite statement). More on that in my signature's tutorial, too.