如何使用IIS7 URL重写来隐藏虚拟目录?

时间:2009-10-01 21:39:38

标签: regex iis-7 url-rewriting virtual-directory

我有一台IIS7服务器,我用它来托管几个不同的网站进行测试。由于官僚主义过多,我无法使用主机标头(我无法在内部DNS服务器上获取新条目,用户也无法更改其本地主机文件)。

我在IIS中设置了默认站点,除了包含我的站点的测试版本的虚拟目录之外什么都没有。

  

Default Site
  ---> TestSite1
  ---> TestSite2

因此,当我要求测试用户测试某个网站时,我会告诉他们转到http://testserver/testsite1

问题是这些网站在任何地方都使用虚拟路径,因此它们无法正常工作。例如,该网站正在使用/css/main.css查找样式表,但由于默认网站的根目录中没有/css文件夹,因此无法找到它。有太多这样的事情需要修改以改变网站的运作方式。

IIS7 URL重写会帮助我吗?如果是这样,我将如何使用正则表达式模式?

2 个答案:

答案 0 :(得分:0)

在这种情况下,我不认为重写可以帮助你。

如果您可以更改代码,则可以执行添加

之类的操作

<base href="http://testserver/testsite1/" /> 到主模板的<head>标签(如果有的话),所以绝对root /将始终解析为正确的虚拟目录。

我也看到人们使用像get_img('button.jpg')这样的代码来解析通过服务器端逻辑的正确路径。

答案 1 :(得分:0)

URL重写不会超过虚拟路径为您提供的内容。它们将帮助转换传入的请求以转到正确的应用程序页面,但是它们将无法调整该应用程序中的任何内部服务器相对绝对链接以访问正确的URL。

您可能需要考虑类似reverse proxy之类的内容,其中包含测试服务器,其中有许多虚拟应用程序充当底层应用程序的代理。它可以处理响应并将嵌入的URL重新写入正确的URL路径(例如,通过插入Richard建议的<base href=''>标记或通过更改实际的html链接)。我相信可能会有反向代理,开箱即用,但我没有任何经验。如果您需要有关此选项的帮助,我建议徘徊到Serverfault,因为设置这样的东西更多的是面向服务器而不是编程相关。