URL 重写导致重定向循环
URL Rewrite causing redirect loop
今天在旧的 .Net Webforms 网站中设置 URL 重写时遇到一个问题让我很沮丧(编辑:这是一个网站项目,而不是 Web 应用程序项目,如果它正在制作区别)。我正在使用的网站链接很多,所有链接都链接到 "webroot.com/default.aspx" 而不仅仅是 "webroot.com"。我们想要设置(某处,此时我不关心它是在 global.asax 作为重定向还是 web.config)一个 URL 重写从 /default.aspx 到 /.
我已经尝试通过 global.asax:
在代码中进行设置
if (Request.Url.PathAndQuery.ToLower().Contains("/default.aspx"))
Response.RedirectPermanent("/" + Request.Url.Query, true);
这会导致重定向循环,我完全理解为什么尝试它是一个愚蠢的想法。没有其他目录有 default.aspx,所以我现在不担心抓到其他目录。
我尝试在 system.webServer 节点中通过 web.config 设置 URL 重写,见此处:
<rewrite>
<rules>
<rule name="RemoveDefaultAspxFromRoot" stopProcessing="true">
<match url="default.aspx" ignoreCase="true" />
<action type="Rewrite" url="/" appendQueryString="true" />
</rule>
</rules>
</rewrite>
这导致了同样的问题,这让我感到困惑,因为我认为重写不会执行重定向,但显然它会执行重定向?
我尝试在规则中添加以下内容作为巫毒博客-post 想法:
<conditions logicalGrouping="MatchAll">
<add input="{REMOTE_PORT}" pattern=".*" />
</conditions>
没有骰子;仍然陷入重定向循环。
我什至通过手动将 URL Rewrite 模块安装到 IIS 并通过 gui 在那里设置规则,可以在这里看到:
http://i.imgur.com/ovYpfhM.png
我仍然遇到重定向问题。
任何人都可以看到我遗漏的任何内容,或者有其他建议吗?奇怪的是,这个问题似乎可以通过使用重写操作为其他人解决,但它对我不起作用。
我已经在 IIS7 上尝试了这些解决方案,方法是在本地发布并通过 IIS 进行设置,然后通过 VS2013 进行 IIS Express 设置。我们的生产服务器使用 IIS7.
IIS有一个"default"文档功能,难道是
页面 default.aspx 是此列表的一部分,尽管您正在重新路由
到“/”,然后又转换为 "default.aspx"。然后通过导致循环的重定向规则将其转换为“/”。
查看您的 ApplicationHost.config 文件了解全局规则。
另请参阅此 url,它记录了规则的层次结构。
"The evaluation is performed in a parent-to-child order, which means that parent rules are evaluated first and the rules defined on a last child level are evaluated last." - http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
尝试替代重定向规则:
在根目录中创建一个名为“notdefault.aspx 的单独页面,并将所有默认值重新路由到新创建的页面。(将 default.aspx 复制到 nodefault.aspx)
另请参阅此 link 以获取更多信息以控制默认值:https://technet.microsoft.com/en-us/library/cc753615(v=ws.10).aspx
我最终将以下内容添加到我的 web.config 中以解决此问题:
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
</files>
</defaultDocument>
基于 reddit post。所以我这部分的总体 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' 已通过 IIS 设置为默认文档时清除默认文档并添加 'default.aspx',但它解决了我的问题。谁能帮忙解释一下这是为什么,我很想学习
今天在旧的 .Net Webforms 网站中设置 URL 重写时遇到一个问题让我很沮丧(编辑:这是一个网站项目,而不是 Web 应用程序项目,如果它正在制作区别)。我正在使用的网站链接很多,所有链接都链接到 "webroot.com/default.aspx" 而不仅仅是 "webroot.com"。我们想要设置(某处,此时我不关心它是在 global.asax 作为重定向还是 web.config)一个 URL 重写从 /default.aspx 到 /.
我已经尝试通过 global.asax:
在代码中进行设置if (Request.Url.PathAndQuery.ToLower().Contains("/default.aspx"))
Response.RedirectPermanent("/" + Request.Url.Query, true);
这会导致重定向循环,我完全理解为什么尝试它是一个愚蠢的想法。没有其他目录有 default.aspx,所以我现在不担心抓到其他目录。
我尝试在 system.webServer 节点中通过 web.config 设置 URL 重写,见此处:
<rewrite>
<rules>
<rule name="RemoveDefaultAspxFromRoot" stopProcessing="true">
<match url="default.aspx" ignoreCase="true" />
<action type="Rewrite" url="/" appendQueryString="true" />
</rule>
</rules>
</rewrite>
这导致了同样的问题,这让我感到困惑,因为我认为重写不会执行重定向,但显然它会执行重定向?
我尝试在规则中添加以下内容作为巫毒博客-post 想法:
<conditions logicalGrouping="MatchAll">
<add input="{REMOTE_PORT}" pattern=".*" />
</conditions>
没有骰子;仍然陷入重定向循环。
我什至通过手动将 URL Rewrite 模块安装到 IIS 并通过 gui 在那里设置规则,可以在这里看到:
http://i.imgur.com/ovYpfhM.png
我仍然遇到重定向问题。
任何人都可以看到我遗漏的任何内容,或者有其他建议吗?奇怪的是,这个问题似乎可以通过使用重写操作为其他人解决,但它对我不起作用。
我已经在 IIS7 上尝试了这些解决方案,方法是在本地发布并通过 IIS 进行设置,然后通过 VS2013 进行 IIS Express 设置。我们的生产服务器使用 IIS7.
IIS有一个"default"文档功能,难道是 页面 default.aspx 是此列表的一部分,尽管您正在重新路由 到“/”,然后又转换为 "default.aspx"。然后通过导致循环的重定向规则将其转换为“/”。
查看您的 ApplicationHost.config 文件了解全局规则。 另请参阅此 url,它记录了规则的层次结构。
"The evaluation is performed in a parent-to-child order, which means that parent rules are evaluated first and the rules defined on a last child level are evaluated last." - http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
尝试替代重定向规则:
在根目录中创建一个名为“notdefault.aspx 的单独页面,并将所有默认值重新路由到新创建的页面。(将 default.aspx 复制到 nodefault.aspx)
另请参阅此 link 以获取更多信息以控制默认值:https://technet.microsoft.com/en-us/library/cc753615(v=ws.10).aspx
我最终将以下内容添加到我的 web.config 中以解决此问题:
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
</files>
</defaultDocument>
基于 reddit post。所以我这部分的总体 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' 已通过 IIS 设置为默认文档时清除默认文档并添加 'default.aspx',但它解决了我的问题。谁能帮忙解释一下这是为什么,我很想学习