diff --git a/reviewboard/cmdline/rbsite.py b/reviewboard/cmdline/rbsite.py
index 83666a0f644e0337001ab6e1a546bc237107ca2d..559fc5bcef4bc930197bfe789bac7293c0727a1d 100755
--- a/reviewboard/cmdline/rbsite.py
+++ b/reviewboard/cmdline/rbsite.py
@@ -20,13 +20,13 @@ from django.db.utils import OperationalError
 from django.utils import six
 from django.utils.six.moves import input
 from django.utils.six.moves.urllib.request import urlopen
 
 from reviewboard import get_manual_url, get_version_string
-
-
-SITELIST_FILE_UNIX = "/etc/reviewboard/sites"
+from reviewboard.platform import (SITELIST_FILE_UNIX,
+                                  DEFAULT_FS_CACHE_PATH,
+                                  INSTALLED_SITE_PATH)
 
 
 # Ignore the PendingDeprecationWarnings that we'll get from Django.
 # See bug 1683.
 warnings.filterwarnings("ignore", category=PendingDeprecationWarning)
@@ -129,12 +129,12 @@ class Site(object):
         'memcached': 'django.core.cache.backends.memcached.MemcachedCache',
         'file': 'django.core.cache.backends.filebased.FileBasedCache',
     }
 
     def __init__(self, install_dir, options):
-        self.install_dir = install_dir
-        self.abs_install_dir = os.path.abspath(install_dir)
+        self.install_dir = self.get_default_site_path(install_dir)
+        self.abs_install_dir = os.path.abspath(self.install_dir)
         self.site_id = \
             os.path.basename(install_dir).replace(" ", "_").replace(".", "_")
         self.options = options
 
         # State saved during installation
@@ -158,10 +158,16 @@ class Site(object):
         self.admin_user = None
         self.admin_password = None
         self.reenter_admin_password = None
         self.send_support_usage_stats = True
 
+    def get_default_site_path(self, install_dir):
+        if os.path.isabs(install_dir):
+            return install_dir
+
+        return os.path.join(INSTALLED_SITE_PATH, install_dir)
+
     def rebuild_site_directory(self):
         """
         Rebuilds the site hierarchy.
         """
         htdocs_dir = os.path.join(self.install_dir, "htdocs")
@@ -1460,11 +1466,11 @@ class InstallCommand(Command):
         # Appears only if using file caching.
         page = ui.page("Where should the temporary cache files be stored?",
                        is_visible_func=lambda: site.cache_type == "file")
 
         ui.prompt_input(page, "Cache Directory",
-                        site.cache_info or "/tmp/reviewboard_cache",
+                        site.cache_info or DEFAULT_FS_CACHE_PATH,
                         save_obj=site, save_var="cache_info")
 
     def ask_web_server_type(self):
         page = ui.page("What web server will you be using?")
 
diff --git a/reviewboard/platform.py b/reviewboard/platform.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7ac73a60886645bf47ed3ee09ad2d69e07cafbc
--- /dev/null
+++ b/reviewboard/platform.py
@@ -0,0 +1,26 @@
+# platform.py
+# This file contains global values that may need to be
+# modified for deployment on different operating system
+# platforms.
+# Packagers should review this file and patch it
+# appropriately for their systems.
+from __future__ import unicode_literals
+
+
+# Location of the sitelist file. This file maintains
+# a list of the installed Review Board sites on this
+# machine and is used when performing a site upgrade
+# to ensure all sites are upgraded together.
+SITELIST_FILE_UNIX = "/etc/reviewboard/sites"
+
+
+# Default location of the cache directory. This path
+# is used in 'rb-site install' if using a file-based
+# cache instead of a memcached-based cache.
+DEFAULT_FS_CACHE_PATH = "/tmp/reviewboard_cache"
+
+
+# Preferred location of the reviewboard sites.
+# If the rb-site tool is passed a site name instead of
+# a full path, it will be prepended with this path.
+INSTALLED_SITE_PATH = "/var/www"
