14

我在 IIS 6 中使用 URL Rewriting.NET 工具。我在 IIS 中为 default.aspx 设置了默认页面内容。我想要做的是让 /default.aspx 提供一个 301 重定向到根目录(www.example.com/default.aspx -> www.example.com)。我试过关闭默认文档,但无济于事。

我希望做的是使用几个 URL Rewriting.NET 规则来实现这个目标。有什么想法吗?

编辑:

对不起,我忘了澄清。如果我在默认文档打开的情况下从 /default.aspx 重定向到 /(我想让它们保持打开状态),那么我会得到一个无限循环的 default -> / -> default

4

6 回答 6

15

最后,我最终使用了带有 URL 重写模块的 IIS 7,它允许您正确地执行此重定向。

编辑 :

规则是

<rule name="Default Redirect" stopProcessing="true">
    <match url="^default\.aspx$" />
    <action type="Redirect" url="/" redirectType="Permanent" />
</rule>

您可以为每个文件夹使用单独的规则,也可以使用

<rule name="All Redirect">
    <match url="^(.*\/)*default\.aspx$" />
    <action type="Rewrite" url="{R:1}" />
</rule>
于 2009-06-02T15:16:30.533 回答
5

不久前,我在试图弄清楚为什么某些 IIS 安装可以重定向 /default.aspx 并且某些会退化为终端循环时遇到了这个问题。

我发现答案是 asp.net 是否被“通配符”映射为在 IIS 中运行所有请求。

简而言之,如果您有一个开箱即用的 IIS 设置,它将始终将默认文档附加到对站点根目录的任何请求中。因此,当您在 ASP.NET 中检查 Request.Url 时,example.com 变为 example.com/default.aspx。因此,如果您检测到这种情况并尝试重定向并返回到 example.com,IIS 会这样做,附加 /default.aspx 并且您的代码会陷入它自己制作的循环中。

例外情况是,如果您设置通配符映射,以便通过 asp.net 管道处理所有请求。在这种情况下,IIS 不再将默认文档附加到 Request.Url 级别的每个请求中。因此,您可以进行重定向。

我把它全部放在这篇博文中:301 Redirecting from /default.aspx to the site root - 最后一句话- 但这是几年前写的,IIS7 中的更改可能已经解决了这个问题,正如当前接受的答案所提供的那样。

但是,如果您正在与这个问题作斗争,那么查看通配符映射状态是正确的起点。

于 2011-11-28T01:07:24.557 回答
2

我有同样的问题。对于那些想知道为什么有人想要这样做的人来说,这是 SEO 的问题。如果谷歌索引你的主页最后有和没有 default.aspx,PageRank 和链接流行度将在两个 URL 之间分开。现在,如果您遇到此问题,并且您能够合并这两个 URL,那么您可能会在搜索排名中得到提升。要记住的另一件事是,如果您遇到麻烦,您必须使用 301 重定向让 Google 在两个 URL 之间合并他们的索引。否则你的努力将是徒劳的。

这有点太晚了,因为您已经通过升级到 IIS7 解决了这个问题。但我只想补充一点,我为 IIS6 提出的解决这个问题的唯一方法是添加一个 ISAPI 过滤器。

我在这里记录了完整的解决方案... http://swortham.blogspot.com/2008/12/redirecting-default-page-defaultaspx-to.html

于 2009-07-14T20:47:51.590 回答
1

如果我理解正确,您不想在有人进入包含该文档的文件夹时显示“default.aspx”。

因此,如果他们确实击中了它,您想自动重定向到“/”并加载默认文档吗?

如果是这种情况,那么如上所述,您将面临无限循环的风险。第二条评论给了你一个答案,但我想将它扩展到重写引擎你想要的是:

关闭默认文档向重写引擎注册每个文件夹当请求该文件夹时,根据您的目标规则加载 default.aspx 文件

这听起来对吗?

我不得不问,你为什么要这样做?

于 2009-03-27T11:53:15.417 回答
0

我不确定我是否理解问题所在。

尽管如果您关闭默认文档,那么 / 将只是指向目录而不是 default.aspx 页面。

保留默认文档并根据 default.aspx 是否在请求的 url 中进行重定向。

于 2009-03-26T17:06:04.363 回答
0

那么你可以使用常规的.net来检查httprequest url,如果它有“default.aspx”,你可以重定向到“/”,不会有无限循环,你最好在预加载时这样做,然后结束响应,尽量减少处理时间

于 2009-04-21T00:54:14.307 回答