安装到默认网站会移动应用程序池

安装到默认网站会移动应用程序池

我在将 Web 应用程序安装到 IIS 7.5 时遇到问题。我使用的是使用 VS2010 构建的标准 Web 应用程序安装程序,但安装应用程序时,我希望将其放置在站点的根目录下(而不是虚拟文件夹内)。以下是安装的示意图:

  • C:\inetpub\wwwroot\
    • 静态<--- IIS 默认文件夹
    • 应用程序1
    • 应用2
    • 应用3
    • ....

每个应用程序都有自己的应用程序池。静态文件夹使用主应用程序池,该池是整个网站默认使用的。

如果我运行安装程序并将虚拟目录字段留空,一切似乎都运行正常。问题是,不知何故,我的所有其他应用程序都被移入了默认应用程序池,并最终因为权限相对严格而崩溃。

有人知道解决这个问题的方法吗?我不希望用户必须输入.../static/...网站的 URL,因此简单地以“正常”方式安装到虚拟目录是行不通的。

谢谢,

-- 丹

答案1

经过大量调查,我认为 Web 应用程序安装程序或 IIS 本身存在错误。由于我暂时无法使用 Web 应用程序安装程序,因此我采用以下方法解决此问题:

  1. 将 IIS 默认文件夹移动到C:\inetpub\wwwroot(无论如何,这是默认文件夹)
  2. 设置整个站点的应用程序池并static使其相同
    1. IIS 不允许您跨应用程序池进行 URL 重写。如果您担心这一点,则必须设置功能齐全的反向代理。
  3. 安装了 IIS URL 重写插件
  4. 使用匹配模式创建了新的 URL 重写规则(/*)(.*)
  5. 规则中添加条件如下(匹配全部)
    1. 输入{URL}不匹配^(/*)app1/(.*)
    2. 输入{URL}不匹配^(/*)app2/(.*)
    3. ...每个应用程序一个...(是的,这很痛苦)
  6. 将操作设置为重写为/static/{R:2}

就我而言,我不需要任何出站规则(即我不需要整个反向代理),因为我的应用程序返回有效的 URL。

该解决方案的优点在于它对用户完全透明,并且任何以 / 开头的现有链接(即...a href="/images/file.jpg"...)仍然有效,因为当最终用户请求时,/images/file.jpgURL 将在内部重写为/static/images/file.jpg

主要的缺点是我必须让匹配模式列表与所有应用程序池保持同步。但就我而言,这不是什么大问题。我实际上可以自动将新的模式字符串注入文件中web.config——但就我而言,这不是什么大问题。

另一个缺点是用户可以看到/static/images/...源代码中的链接——但我并不关心这一点。

所以 - 希望这能对将来的某些人有所帮助。

相关内容