我在将 Web 应用程序安装到 IIS 7.5 时遇到问题。我使用的是使用 VS2010 构建的标准 Web 应用程序安装程序,但安装应用程序时,我希望将其放置在站点的根目录下(而不是虚拟文件夹内)。以下是安装的示意图:
- C:\inetpub\wwwroot\
- 静态<--- IIS 默认文件夹
- 应用程序1
- 应用2
- 应用3
- ....
每个应用程序都有自己的应用程序池。静态文件夹使用主应用程序池,该池是整个网站默认使用的。
如果我运行安装程序并将虚拟目录字段留空,一切似乎都运行正常。问题是,不知何故,我的所有其他应用程序都被移入了默认应用程序池,并最终因为权限相对严格而崩溃。
有人知道解决这个问题的方法吗?我不希望用户必须输入.../static/...
网站的 URL,因此简单地以“正常”方式安装到虚拟目录是行不通的。
谢谢,
-- 丹
答案1
经过大量调查,我认为 Web 应用程序安装程序或 IIS 本身存在错误。由于我暂时无法使用 Web 应用程序安装程序,因此我采用以下方法解决此问题:
- 将 IIS 默认文件夹移动到
C:\inetpub\wwwroot
(无论如何,这是默认文件夹) - 设置整个站点的应用程序池并
static
使其相同- IIS 不允许您跨应用程序池进行 URL 重写。如果您担心这一点,则必须设置功能齐全的反向代理。
- 安装了 IIS URL 重写插件
- 使用匹配模式创建了新的 URL 重写规则
(/*)(.*)
- 规则中添加条件如下(匹配全部)
- 输入
{URL}
不匹配^(/*)app1/(.*)
- 输入
{URL}
不匹配^(/*)app2/(.*)
- ...每个应用程序一个...(是的,这很痛苦)
- 输入
- 将操作设置为重写为
/static/{R:2}
就我而言,我不需要任何出站规则(即我不需要整个反向代理),因为我的应用程序返回有效的 URL。
该解决方案的优点在于它对用户完全透明,并且任何以 / 开头的现有链接(即...a href="/images/file.jpg"...
)仍然有效,因为当最终用户请求时,/images/file.jpg
URL 将在内部重写为/static/images/file.jpg
。
主要的缺点是我必须让匹配模式列表与所有应用程序池保持同步。但就我而言,这不是什么大问题。我实际上可以自动将新的模式字符串注入文件中web.config
——但就我而言,这不是什么大问题。
另一个缺点是用户可以看到/static/images/...
源代码中的链接——但我并不关心这一点。
所以 - 希望这能对将来的某些人有所帮助。