Solid J2EE applications
Another great way to keep costs down is up front: try to develop as little new code as possible while leveraging open source or commercial libraries and frameworks.
(*) CherryPy is a pythonic, object-oriented web development framework that seems just right to me for publishing behavior of Python objects as web services and web forms. Ruby on Rails is a very cool framework for quickly building database centric web sites. RoR's wrapping of database tables as objects is just like the way I use a generator in Python to dynamically create wrappers for database tables. I believe that CherryPy and Ruby on Rails will prove to be as stable as J2EE web applications, but I don't have enough experience with them yet.
(**) For non-life-threatening critical web applications, here is a really simple backup technique: if you have 2 deployed web applications on different dedicated servers (even better in different hosting facilities), use backup scripts on each server to do database dumps, etc., and rsync to the other server. Most rented servers have adequate disk space, and rsync reduces bandwidth by using data compression. By relying on the extremely low probability that you would experience multiple server failures, this is one more way to cut down long term maintenance costs of web applications.