URL重写导致重定向循环

时间:2015-06-03 19:52:25

标签: .net iis iis-7 web-config iis-8

今天在一个旧的.Net Webforms网站上设置URL Rewrite时,一个问题令我感到沮丧(编辑:这是一个网站项目,而不是Web应用程序项目,如果这有所不同)。我正在处理的网站链接很多,都链接到" webroot.com/default.aspx"而不只是" webroot.com"。我们想要设置(SOMEWHERE,此时我不在乎它是否在global.asax中作为重定向或web.config)来自/default.aspx的URL重写到/.

我尝试通过global.asax设置代码:

print_r($result);

这导致了一个重定向循环,我完全理解为什么,尝试它是一个愚蠢的想法。没有其他目录有default.aspx,所以我现在不担心会抓住其他目录。

我已尝试在system.webServer节点中通过web.config设置URL Rewrite,如下所示:

if (Request.Url.PathAndQuery.ToLower().Contains("/default.aspx"))
  Response.RedirectPermanent("/" + Request.Url.Query, true);

这导致了同样的问题,这让我感到困惑,因为我没有想到重写会执行重定向,但显然它确实存在?

我已尝试在规则中添加以下内容作为巫毒博客帖子的想法:

<rewrite>
  <rules>
    <rule name="RemoveDefaultAspxFromRoot" stopProcessing="true">
      <match url="default.aspx" ignoreCase="true" />
      <action type="Rewrite" url="/" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>

没有骰子;仍然陷入重定向循环。

我甚至手动将URL Rewrite模块安装到IIS并通过gui设置规则,这可以在这里看到:

http://i.imgur.com/ovYpfhM.png

我仍然遇到重定向问题。

任何人都可以看到我遗失的任何内容,或者有其他建议吗?奇怪的是,这个问题似乎是通过使用重写操作解决了其他人的问题,但它并不适合我。

我已经在IIS7上尝试了这些解决方案,通过本地发布并通过IIS和IIS Express通过VS2013进行设置。我们的生产服务器使用IIS7。

2 个答案:

答案 0 :(得分:0)

IIS有一个&#34;默认&#34;文档功能,可能是那样 页面default.aspx是此列表的一部分,虽然您正在重新路由 到&#34; /&#34;然后转换为&#34; default.aspx&#34;。然后将其转换为&#34; /&#34;通过导致循环的重定向规则。

请参阅ApplicationHost.config文件以获取全局规则。 另请参阅此URL,其中记录了规则的层次结构。

&#34;评估以父对子顺序执行,这意味着首先评估父规则,最后评估最后一个子级别上定义的规则。&#34; - http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

尝试其他重定向规则:

在根目录中创建一个具有不同名称&#34; notdefault.aspx的单独页面,并将所有默认值重新路由到新创建的页面。 (将default.aspx复制到nodefault.aspx)

另请参阅此链接以获取有关控制默认值的更多信息:https://technet.microsoft.com/en-us/library/cc753615(v=ws.10).aspx

答案 1 :(得分:0)

我最后将以下内容添加到我的web.config中以解决此问题:

<defaultDocument>
  <files>
   <clear />
   <add value="default.aspx" />
  </files>
 </defaultDocument>

基于reddit帖子。所以我对此部分的整体web.config如下所示:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="RemoveDefaultAspxFromRoot" stopProcessing="true">
          <match url="default.aspx" ignoreCase="true" />
          <action type="Redirect" url="/" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
    <defaultDocument enabled="true">
      <files>
        <clear />
        <add value="default.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

这可以很好地添加其他文件。我不一定确定我理解为什么清除默认文档并添加'default.aspx'时,'default.aspx'已经通过IIS设置为默认文档,但它解决了我的问题。如果有人能帮助解释为什么会这样,我很乐意学习。