I'd choose a red/blue/green approach.
Basically it boils down to rotating the three environments (red, blue, green). The application is served from either separate hosts, directories, processes. Whatever your isolation level is
The basic assumption is that, just like your application codebase, your codebase for configuration management is in version control so that you can jump back in time. It is up to you (or rather the assumptions and constraints of your business to find a workflow based on branches or whatever floats your boat)
* red: Old "production version
* blue: Current "production" version
* green: Current "development" version -- this does NOT mean that development happens here. This DOES mean that the rollout and actual verification runs against this version (most probably the people who make the call of releasing a new version have access to it)
As you are ready to release you will simply switch the thing that routes your traffic (it does sound an awful lot like a service that is reachable via a network connection) to the "green" environment.
You end up with this state:
* blue: Old "production version
* green: Current "production" version
* red: Current "development" version
After the next deployment:
* green: Old "production version
* red: Current "production" version
* blue: Current "development" version
Now go forth and rotate :)
Yeah it's pretty general, but I can't give you a more specific answer since your question was stated that way or it could be me simply misunderstanding what you want.