今天在一个旧的.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。
答案 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设置为默认文档,但它解决了我的问题。如果有人能帮助解释为什么会这样,我很乐意学习。