9

即使从以下网址重写网址,我也无法删除我网站网址的尾部斜杠: http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

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

我什至创建了一个测试目录并添加了名为 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>

欢迎任何帮助

4

3 回答 3

9

您正在使用类型的操作,Rewrite但您想要一个Redirect.

将您的配置更改为:

<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="(.*)/$".

提示:

测试模式的最佳方法是使用 IIS 测试模式工具。
在您网站的根目录 -> URL 重写 -> 创建空白规则 -> 单击测试模式:

于 2013-02-11T17:16:50.763 回答
1

我遇到了同样的问题,这就是我发现的。

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

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

所以我注意到检查请求的 url 是文件还是目录的条件,我删除了它们。

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

然后我发现这篇文章https://support.microsoft.com/en-us/kb/298408与 IIS 6 相关,但显然仍然是一个问题。

因此,因为我在一个 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>

希望这可以帮助!

于 2015-09-09T00:29:10.553 回答
0

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

单击需要规则的网站并在Features视图中打开URL Rewrite,然后在Actions部分(右窗格)上选择Add Rule(s)并选择Append or Remove the trailing slash symbol。在下一个窗口的下拉菜单中选择remove if exists

希望这可以帮助。

于 2014-03-18T15:14:35.927 回答