想象一下以下目录结构:
c:\websites\users\dave\
c:\websites\users\dave\www.mysite1.com
c:\websites\users\dave\www.mysite2.com
c:\websites\users\alan\
c:\websites\users\alan\www.oursite1.co.uk
c:\websites\users\alan\www.oursite2.co.uk
据我所知,为了实现这一点,我需要在 IIS 中设置四个独立的网站。我真正想要做的是让 Dave 和 Alan 拥有 FTP 访问权限,访问他们的 c:\websites\users\dave\
目录c:\websites\users\alan\
,然后只需创建一个新的 www.mysite3.com 目录并将域指向正确的 IP 地址,即可创建全新的网站,没有我们需要在 IIS 中添加一个新网站。
这可能吗?
答案1
如果不创建额外的网站,您就无法做到这一点。如果没有不同的 IP 绑定或主机头,IIS 就无法知道要提供什么内容。
但是,您可以在站点根目录设置某种脚本,通过分析传入请求的主机标头重定向到正确的内容。例如,您可以将所有站点指向同一个 IP,然后 redirect.aspx/php/py/whatever 查看主机标头,并重定向到正确的内容。
答案2
我们无需在 IIS 中添加新网站。
不可能。IIS 需要知道如何路由请求。需要设置权限。但最重要的是 - 您需要 IIS 配置。
答案3
正如其他人所说的那样(我再重复一遍),如果不创建额外的网站,你就无法做到这一点。
但是,您可以伪造它,特别是如果他们遵守上面列出的命名约定。您要做的是创建一个计划任务来检查这些用户目录的子级别。当它找到看起来正确的目录名时,它会运行一些为您创建站点的命令。在 PowerShell 中创建脚本,它比简单的批处理文件为您提供更好的字符串处理语义和错误检查。每 15 分钟运行一次或类似时间。
一些关键命令:
添加站点:
appcmd add site /name:"www.mysite1.com" /bindings:http://www.mysite1.com:80/ /physicalPath:"c:\websites\users\dave\www.mysite1.com"
删除站点:
appcmd delete site "www.mysite1.com"
查看站点是否已经存在:
appcmd list site "www.mysite1.com"
'appcmd' 实用程序位于C:\Windows\System32\Inetsrv\
。使用上述命令创建的站点将使用主机头来确定服务器将为哪个站点提供服务。
答案4
您可以有一个 IIS 站点,其中包含多个主机名标头。然后有一个默认文档,例如 index.aspx。然后其中的代码可以检测您指定的 URL 并转到,例如 ./dave/www.mysite1.com/index.aspx。