从 IIS 中嵌套应用程序的虚拟目录根目录中删除尾部斜杠
Posted
技术标签:
【中文标题】从 IIS 中嵌套应用程序的虚拟目录根目录中删除尾部斜杠【英文标题】:Removing the trailing slash from a nested application's virtual directory root in IIS 【发布时间】:2014-03-13 15:38:21 【问题描述】:我有一个包含嵌套应用程序的网站。假设嵌套应用程序的虚拟目录是“/app”。当向 www.mysite.com/app 发出请求时,会重定向到 www.mysite.com/app/,可能是因为虚拟目录不为空。我在嵌套应用程序的 web.config 中设置了一条规则,以从所有 url 中删除尾部斜杠,但这不会影响嵌套应用程序的根路径。有没有办法(可能是 IIS 中的设置)在没有斜杠的情况下重写或重定向到根目录?我尝试了许多重写和重定向规则都无济于事。
这是我删除尾部斜杠的规则:
<rule name="Remove trailing slash" stopProcessing="true">
<match url="(.*)/$" />
<conditions>
<add input="REQUEST_FILENAME" matchType="IsDirectory" negate="true" />
<add input="REQUEST_FILENAME" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="R:1" />
</rule>
就像我说的,这很好用,但这不会影响根目录。我想从 www.mysite.com/app,而不是 www.mysite.com/app/ 加载根目录中有一个 default.aspx 页面。
有解决办法吗?
【问题讨论】:
如果您不知道,这似乎是 IIS called Courtesy Redirects 的“功能”。我一直在寻找解决方法,但没有找到任何解决方法。另见:***.com/questions/8420371/… 【参考方案1】:我可能终于有答案了。这是在 Windows Server 2008 R2、IIS 7.5 上。
解决方案,在 IIS 中:
禁用子应用程序的默认文档功能。 使用 Url Rewrite,创建一个规则以将空请求重写(而不是重定向)到 default.aspx这是 web.config 中的规则,以及禁用默认文档的条目。我使用 UI 来执行这些操作,这就是它创建的:
<defaultDocument enabled="false" />
<rewrite>
<rules>
<rule name="No slash root" enabled="true" stopProcessing="true">
<match url="^$" />
<action type="Rewrite" url="default.aspx" />
</rule>
</rules>
</rewrite>
问题似乎源于有一个默认文档。当我禁用默认文档时,它从重定向更改为 403 禁止,这是通常的目录浏览尝试。 然后添加规则重写空白请求运行默认页面,不改变浏览器url。
我刚刚完全禁用了默认文档。可能只是从默认文档列表中删除 default.aspx,但我没有尝试。
空请求规则是拿起 www.mysite.com/app 没有别的,它执行 default.aspx 页面。
我做了一些测试以确保页面仍在子应用程序中执行。我只是想确保它不会以某种方式神奇地认为这是根应用程序中的一个文件。我通过创建各种 .aspx 文件来编写和读取良好的旧 Application["abc"] 变量来做到这一点。子应用默认文件可以读取子应用中另一个文件写入的变量。根级文件没有看到该变量。
对于更多规则,我使用 Helicon Ape。几年前我开始使用他们的软件,我更喜欢 htaccess 语法而不是 IIS 语法。我在 IIS 中使用上面的规则对此进行了测试,以避免尾部斜杠,并为我所有剩余的规则使用 Ape/htaccess,这似乎有效。
我多次尝试单独让 Ape 避免重定向,但无济于事。好像是 IIS 先行,所以这条规则需要在 IIS 中,而其余规则则没有。
注意:在尝试这些规则时,您的浏览器往往会缓存重定向。在“隐身模式”(Chrome)下工作,和/或每次都清除浏览器缓存。见https://***.com/a/9204355/292060
【讨论】:
以上是关于从 IIS 中嵌套应用程序的虚拟目录根目录中删除尾部斜杠的主要内容,如果未能解决你的问题,请参考以下文章
在server2003虚拟机中如何安装IIs?(没光盘,自己在网上下载的IIs6.0)