gpt4 book ai didi

iis - 删除多个正斜杠

转载 作者:行者123 更新时间:2023-12-04 14:16:09 27 4
gpt4 key购买 nike

我注意到使用 .NET MVC 站点,您可以使用多个正斜杠来访问 URL,例如:

http://www.example.com//category
http://www.example.com//category//product

URL 加载正常并且一切正常,但是,我被要求阻止这种情况发生。

我一直在尝试使用 IIS URL Rewrites 来让它工作:
<rewrite>
<rules>
<rule name="Remove multiple slashes" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{UNENCODED_URL}" matchType="Pattern" pattern="^(.*)//(.*)$" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{C:1}/{C:2}" />
</rule>
</rules>
</rewrite>

然而,结果似乎非常喜怒无常。有时产品 URL 会重定向,有时不会,并且类别也会发生同样的情况。这几乎就像 URL 被应用程序缓存一样。

有谁知道我是否可以禁用任何现有的缓存,或者是否有另一种方法来解决这个多斜线问题?

任何帮助深表感谢。

最佳答案

最后,我求助于使用重定向背后的代码来让它工作。

我在使用 IIS URL Rewrites 时遇到的问题是由于 IIS 缓存重定向的方式。当我完全禁用缓存时,正如 WouterH 建议的那样,它起作用了。但是,我不习惯以这种方式禁用缓存,因为它可能会引入性能问题。

我的解决方法是在 Global.asax.cs 文件中使用重定向代码:

protected void Application_BeginRequest(object sender, EventArgs e)
{
string requestUrl = Request.ServerVariables["REQUEST_URI"];
string rewriteUrl = Request.ServerVariables["UNENCODED_URL"];
if (rewriteUrl.Contains("//") && !requestUrl.Contains("//"))
Response.RedirectPermanent(requestUrl);
}

我本来希望使用 IIS URL Rewrite 来实现这一点,不幸的是我没有时间继续沿着这条线继续下去。

有趣的是,下面的方法确实有效,但是, HTTP_X_REWRITE_URL是由我在本地运行的 Helicon ISAPI Rewrite 添加的,但在我们的生产服务器上不可用。
<rewrite>
<rules>
<rule name="Remove multiple slashes" stopProcessing="true">
<match url=".*" />
<action type="Redirect" url="{REQUEST_URI}" />
<conditions>
<add input="{HTTP_X_REWRITE_URL}" pattern="([^/]*)/{2,}([^/]*)" />
</conditions>
</rule>
</rules>
</rewrite>

关于iis - 删除多个正斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12004223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com