【问题标题】:URL Rewrite from /default.aspx to /URL 重写从 /default.aspx 到 /
【发布时间】:2010-10-15 18:14:41
【问题描述】:

我在 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

【问题讨论】:

  • 我建议您发布有关您的配置的信息

标签: asp.net iis-6 urlrewriting.net


【解决方案1】:

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

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

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

【讨论】:

  • 会造成无限循环
  • "根据 default.aspx 是否在请求的 url 中进行重定向": if(Request.Url.ToString().ToLower().IndexOf("default.aspx") != - 1) response.redirect("/");
  • 这样还是会导致死循环,因为默认文档是开启的,对/的请求变成对/default.aspx的请求
【解决方案2】:

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

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

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

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

这听起来对吗?

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

【讨论】:

  • 我知道这很奇怪,但这是网站对 SEO 价值的要求,因此只有一个链接会将您带到 default.aspx,而不是两个。
  • 我已经进行了相当多的 SEO 培训,听到这似乎很奇怪。我很惊讶像 Google 或 MSN 这样的搜索引擎会惩罚你。所以我只能猜测它,所以你可以获得一个网址的所有排名积分。仍然 - 有一段时间没有做 SEO 的东西,所以这只是一个猜测!
  • 据我了解,并不是有两个页面提供同一个页面,而是如果人们链接到 example.com 和 example.com/default.aspx 我是告诉它传播链接值。
  • 你说得对,2页内容相同不如1页:google.com/support/webmasters/bin/answer.py?answer=66359
【解决方案3】:

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

【讨论】:

  • 对不起,我没有在上面的答案中看到 cmets,嘿,答案还好
【解决方案4】:

最后,我最终使用了带有 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>

【讨论】:

  • 我不知道“升级到 IIS7”是否真的可以解决这个问题。
  • 这不适用于回发...(每次您执行一些 POST 页面的操作 - 例如按钮单击时,您都会被重定向)
  • 也许,但我认为这将取决于表单上的操作,无论是设置为 default.aspx 还是设置为 /(虽然不能肯定,但没有需要尝试那个级别)
  • @kape123 - 如果需要,您可以添加一个仅将此重定向应用于 GET 请求的条件。重写模块应该允许您轻松构建该条件...iis.net/download/urlrewrite
  • 第二条规则(用于处理所有文件夹中的 Default.aspx)只对我进行了小改动后才对我起作用:type="Redirect" redirectType="Permanent" 而不是简单的 type="Rewrite"。
【解决方案5】:

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

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

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

【讨论】:

    【解决方案6】:

    不久前,我在试图弄清楚为什么某些 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 - the final word - 但这是几年前写的,IIS7 中的更改可能已经解决了这个问题,正如当前接受的答案所提供的那样。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2015-11-18
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      相关资源
      最近更新 更多