diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index dcd5da9c4ed8a5fb559507e96593987b021cea5d..764870927c38a69463ef34607a1b4764621277be 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -63,7 +63,8 @@ static const char*	strJavaScriptLoadPath		="JavaScriptLoadPath";
 static const char*	strJavaScriptOptions		="JavaScriptOptions";
 static const char*	strSemFileCheckFrequency	="SemFileCheckFrequency";
 static const char*	strIniFileName				="iniFileName";
-static const char*  strFileVpathPrefix			="FileVPathPrefix";
+static const char*  strFileVPathPrefix			="FileVPathPrefix";
+static const char*  strFileVPathForVHosts		="FileVPathForVHosts";
 
 #define DEFAULT_LOG_LEVEL				LOG_DEBUG
 #define DEFAULT_BIND_RETRY_COUNT		2
@@ -457,7 +458,7 @@ void sbbs_read_ini(
 		bbs->login_attempt = get_login_attempt_settings(list, section, global);
 		bbs->max_concurrent_connections = iniGetInteger(list, section, strMaxConConn, 0);
 
-		SAFECOPY(bbs->web_file_vpath_prefix, iniGetString(list, "web", strFileVpathPrefix, nulstr, value));
+		SAFECOPY(bbs->web_file_vpath_prefix, iniGetString(list, "web", strFileVPathPrefix, nulstr, value));
 	}
 
 	/***********************************************************************/
@@ -715,7 +716,8 @@ void sbbs_read_ini(
 		SAFECOPY(web->logfile_base
 			,iniGetString(list,section,"HttpLogFile",nulstr,value));
 		SAFECOPY(web->file_vpath_prefix
-			,iniGetString(list, section, strFileVpathPrefix, nulstr, value));
+			,iniGetString(list, section, strFileVPathPrefix, nulstr, value));
+		web->file_vpath_for_vhosts = iniGetBool(list, section, strFileVPathForVHosts, FALSE);
 
 		SAFECOPY(web->default_cgi_content
 			,iniGetString(list,section,"DefaultCGIContent",WEB_DEFAULT_CGI_CONTENT,value));
@@ -1268,7 +1270,9 @@ BOOL sbbs_write_ini(
 			break;
 		if(!iniSetString(lp,section,"HttpLogFile",web->logfile_base,&style))
 			break;
-		if(!iniSetString(lp,section,strFileVpathPrefix, web->file_vpath_prefix, &style))
+		if(!iniSetString(lp,section,strFileVPathPrefix, web->file_vpath_prefix, &style))
+			break;
+		if(!iniSetBool(lp,section,strFileVPathForVHosts, web->file_vpath_for_vhosts, &style))
 			break;
 
 		if(!iniSetString(lp,section,"DefaultCGIContent",web->default_cgi_content,&style))
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 7149db35ad311a7745a6c4c7800b76cd2d76fa53..3362f306e7fb529117ae755c00d9bd8910c52a59 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -3129,6 +3129,7 @@ static BOOL get_request_headers(http_session_t * session)
 static BOOL get_fullpath(http_session_t * session)
 {
 	char	str[MAX_PATH+1];
+	bool	vhost = false;
 
 	if(alias_list != NULL) {
 		for(size_t i = 0; alias_list[i] != NULL; i++) {
@@ -3143,19 +3144,22 @@ static BOOL get_fullpath(http_session_t * session)
 		}
 	}
 
-	if(startup->file_vpath_prefix[0] && strncmp(session->req.physical_path, startup->file_vpath_prefix, strlen(startup->file_vpath_prefix)) == 0) {
-		session->filebase_access = TRUE;
-		return TRUE;
-	}
 	if(session->req.vhost[0] && startup->options&WEB_OPT_VIRTUAL_HOSTS) {
 		safe_snprintf(str,sizeof(str),"%s/%s",root_dir,session->req.vhost);
-		if(isdir(str))
+		if(isdir(str)) {
+			vhost = true;
 			safe_snprintf(str,sizeof(str),"%s/%s%s",root_dir,session->req.vhost,session->req.physical_path);
-		else
+		} else
 			safe_snprintf(str,sizeof(str),"%s%s",root_dir,session->req.physical_path);
 	} else
 		safe_snprintf(str,sizeof(str),"%s%s",root_dir,session->req.physical_path);
 
+	if(startup->file_vpath_prefix[0] && (vhost == false || startup->file_vpath_for_vhosts == true)
+		&& strncmp(session->req.physical_path, startup->file_vpath_prefix, strlen(startup->file_vpath_prefix)) == 0) {
+		session->filebase_access = TRUE;
+		return TRUE;
+	}
+
 	if(FULLPATH(session->req.physical_path,str,sizeof(session->req.physical_path))==NULL)
 		return(FALSE);
 
diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h
index 9b470cd9cb49af0adb11523e0965214ab4a35e51..dae7a419be63e4e9e30b0ac093164e42e019b9dd 100644
--- a/src/sbbs3/websrvr.h
+++ b/src/sbbs3/websrvr.h
@@ -69,6 +69,7 @@ typedef struct {
 	char	logfile_base[INI_MAX_VALUE_LEN];		/* Logfile base name (date is appended) */
 	char	ini_fname[INI_MAX_VALUE_LEN];
 	char	file_vpath_prefix[INI_MAX_VALUE_LEN];
+	BOOL	file_vpath_for_vhosts;
 
 	/* Misc */
     char	host_name[128];