gpt4 book ai didi

iis - 带有 IIS URL 重写模块 2.0 的 Server.MapPath()

转载 作者:行者123 更新时间:2023-12-04 04:45:55 25 4
gpt4 key购买 nike

我在 IIS 中有一个网站,将旧版经典 asp 应用程序配置为子应用程序。

我基本上是在尝试创建 URL 重写规则,这样我就不必更改代码中的所有相对 URL。

例如诸如“/themes/somedirectory”之类的 URL 应该映射到“/legacy/themes/somedirectory”

使用 URL Rewrite Module 2.0我有一个 URL 重写规则配置如下:

<rule name="Reroute themes">
<match url="^themes.*" />
<action type="Rewrite" url="/legacy/{R:0}" />
</rule>

这在导航到 URL 时工作正常。然而,当使用 Server.MapPath() ,它没有应用重写规则。

Server.MapPath()实际上应该考虑到这一点?如果没有,我应该如何在不修改代码的情况下重新路由应用程序?

最佳答案

我一直在寻找同样的东西,所以我在一个测试应用程序中试了一下。看来 Server.MapPath() 不承认 URL 重写模块规则。

以下是我使用空 Web 项目(Razor 语法)进行测试的方法:

重写规则:

<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite rule1 for test1">
<match url="^test1(.*)" />
<action type="Rewrite" url="{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>

cshtml:
<p>
The URL for this page is @Request.Url.AbsoluteUri .
<br />
MapPath of /test1 is @Server.MapPath("~/test1")
<br />
MapPath of / is @Server.MapPath("~/")
</p>

我打了 http://localhost/ ,然后 http://localhost/test1 .结果是:
The URL for this page is http://localhost/ .
MapPath of /test1 is c:\src\temp\test1
MapPath of / is c:\src\temp\

所以看起来 mappath 基本上是在使用 System.AppDomain.CurrentDomain.BaseDirectory (或类似的东西)并将其与相对 URL 结合起来。在旁注中,我已经单独确认 MapPath()考虑到 1 级虚拟目录,但不考虑第 2 级(即 virt 指向另一个也定义了 virt 的位置)。

关于iis - 带有 IIS URL 重写模块 2.0 的 Server.MapPath(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com