Personally what I think you should do is rewrite all urls to one point of entry e.g. index.php and from there find if the page requested exists and if it doesn't give them a nice error.
But onto what you wanted, if you want to rewrite only urls that are in the form of /site/file to file.php then this is what you want
Code:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^site/([^/\.]+)/?$ $1.php
This will rewrite the urls as stated with the optional trailing slash but this will not rewrite urls in the form of /site/folder/file to folder/file.php, if this is what you want you can use the following.
Code:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^site/(.*?)$ $1.php
This will rewrite urls in the form of /site/folder/file or /site/folder/subfolder/file etc to folder/file.php or folder/subfolder/file.php. You can also add your follow sym links or what not.
Enjoy!