diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index c7b4bb49ea0284a2cec8cb235ad580b94486d639..7f47b9546b576d2c15d62d848ecbfde04f30508a 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -47,6 +47,7 @@ static ini_bitdesc_t ftp_options[] = {
 static ini_bitdesc_t web_options[] = {
 
 	{ WEB_OPT_DEBUG_TX				,"DEBUG_TX"				},
+	{ WEB_OPT_VIRTUAL_HOSTS			,"VIRTUAL_HOSTS"		},
 
 	/* shared bits */
 	{ BBS_OPT_NO_HOST_LOOKUP		,"NO_HOST_LOOKUP"		},
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 171b6a5153797c17a4c2a388814ac9d3f85d9298..7542745436dc94cc9bb31a74097199fa6ffca0bb 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -910,9 +910,13 @@ static BOOL check_request(http_session_t * session)
 	FILE*	file;
 	
 	lprintf("Validating request: %s",session->req.request);
-	if(session->host[0])
-		sprintf(path,"%s%s%s",root_dir,session->host,session->req.request);
-	else
+	if(!(startup->options&WEB_OPT_VIRTUAL_HOSTS))
+		session->host[0]=0;
+	if(session->host[0]) {
+		sprintf(path,"%s%s",root_dir,session->host);
+		if(isdir(path))
+			sprintf(path,"%s%s%s",root_dir,session->host,session->req.request);
+	} else
 		sprintf(path,"%s%s",root_dir,session->req.request);
 	
 	if(FULLPATH(session->req.request,path,sizeof(session->req.request))==NULL) {
diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h
index e6f77ffb09040235eb17a1415ccc85fbd5cbd47f..76893a0332e7b1606a344a409b894be1cf1ad5d0 100644
--- a/src/sbbs3/websrvr.h
+++ b/src/sbbs3/websrvr.h
@@ -90,6 +90,7 @@ typedef struct {
 } web_startup_t;
 
 #define WEB_OPT_DEBUG_TX			(1<<0)	/* Log all transmitted responses	*/
+#define WEB_OPT_VIRTUAL_HOSTS		(1<<1)	/* Use virutal host html subdirs	*/
 
 #ifdef DLLEXPORT
 #undef DLLEXPORT