Iis 7 IIS强制斜杠,即使URL重写也可以删除斜杠

Iis 7 IIS强制斜杠,即使URL重写也可以删除斜杠,iis-7,url-rewriting,trailing-slash,Iis 7,Url Rewriting,Trailing Slash,我无法删除网站URL的尾部斜杠,即使URL重写自: 真令人沮丧,因为它应该是如此简单,但我的尝试没有产生任何结果 我甚至创建了一个测试目录,添加了名为desktops.aspx的文件和名为desktops的子文件夹 没有子目录“/test/desktops”可以正常加载,因为我将默认文档设置为查看desktops.aspx 创建了一个子文件夹,但仍然引用“/test/desktops”,它强制斜杠并查看子目录 为什么IIS会这样做,因为它应该先查找文件,然后再查找正确的子目录?服务器端是否有强制

我无法删除网站URL的尾部斜杠,即使URL重写自:

真令人沮丧,因为它应该是如此简单,但我的尝试没有产生任何结果

我甚至创建了一个测试目录,添加了名为desktops.aspx的文件和名为desktops的子文件夹

没有子目录“/test/desktops”可以正常加载,因为我将默认文档设置为查看desktops.aspx

创建了一个子文件夹,但仍然引用“/test/desktops”,它强制斜杠并查看子目录

为什么IIS会这样做,因为它应该先查找文件,然后再查找正确的子目录?服务器端是否有强制反斜杠的设置

URL重写片段:

<rule name="SEO - Remove trailing slash" stopProcessing="false">
<match url="(.+)/$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_METHOD}" pattern="GET" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="_{R:1}" />
</rule>


欢迎提供任何帮助

您正在使用类型为
Rewrite
的操作,但需要
重定向

将配置更改为:

<rule name="SEO - Remove trailing slash" stopProcessing="false">
  <match url="(.*)/$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
  <action type="Redirect" url="{R:1}" />
</rule>

您还需要将
url=“(.+)/$”
更改为
url=“(.*)/$”

提示:

<rule name="SEO - Remove trailing slash" stopProcessing="false">
<match url="(.+)/$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_METHOD}" pattern="GET" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="_{R:1}" />
</rule>
测试模式的最佳方法是使用IIS测试模式工具。

在您网站的根目录下->URL重写->创建空白规则->单击测试模式:

我遇到的问题是PDF文件的链接带有前向斜杠,所以在运行IIS 6.1的Windows Server 2008 R2中对我有效的是:

单击需要规则的网站,在
功能
视图中打开
URL重写
,然后在
操作
部分(右窗格)选择
添加规则
并选择
附加或删除尾部斜杠符号
。在下拉列表的下一个窗口中,选择
删除(如果存在)


希望这能有所帮助。

我也遇到了同样的问题,以下是我的发现

我的意图是在MVC网站上使用此规则,但我不想在生产环境中进行测试,所以我在一个已经设置好的网站上测试了此规则,该网站恰好是web forms asp.net

我遇到了和你一样的问题。导航到www.example.com/test会重定向到www.example.com/test/,即使规则已就位

因此,我注意到检查请求的url是否为文件或目录的条件,并将其删除

现在转到www.example.com/test/重定向到www.example.com/test。耶!否。IIS自动将另一个重定向添加回www.example.com/test/导致重定向循环。嘘

然后我发现了这篇与IIS6相关的文章,但显然仍然是一个问题

因为我在一个asp.net web表单站点中,所以在我的例子中/test是一个物理目录,而IIS中有一些东西强制使用目录的尾随斜杠。很抱歉,我找不到一个简单的方法把它关掉

然而!我的要求是MVC和配置的路由不是目录。所以我在一个MVC网站上再次尝试了它,重定向以删除尾随斜杠非常有效

我最后得出的规则是:

<rule name="RemoveDatSlash" stopProcessing="true">
    <match url="(.*)/$" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>


希望这有帮助

有道理。谢谢实际上,我一直在尝试重定向所有其他规则,但忘了检查这一条。无论如何,我按照你的指示更新了规则,但我仍然被重定向到斜杠。这是目前使用的唯一规则/test/desktops重定向到/test/desktops/I出错,您应该使用
(.*)/$
作为模式(请参阅我的更新答案)。我应该听从我自己的建议……:)呵呵。明白了。我更新了,但仍然没有工作。斜杠已强制重新打开。您是否尝试清理浏览器的缓存?默认情况下,重定向是永久性的,web浏览器通常会缓存此信息()。谢谢。我不知道它必须是一个虚拟目录,而不是一个物理路径!啊!