【发布时间】:2021-03-29 02:25:46
【问题描述】:
我有一个网站,托管在 Azure 应用服务上。我想做的是重定向流量,例如:
https://mysitecom//test//test2
或者:
https://mysitecom/test//test2
会重定向到相同的位置:
https://mysitecom/test/test2
到目前为止,我已经尝试添加一些中间件来处理这个问题;例如:
app.Use(next => context =>
{
if (context.Request.Path.Value.Contains("//"))
{
context.Response.Redirect(context.Request.Path.Value.Replace("//", "/"), true);
return;
}
});
我也试过了:
var options = new RewriteOptions()
.AddRedirect("redirect-rule/^(.*)//(.*)$", "redirected/$1/%2");
app.UseRewriter(options);
这两种方法在一定程度上都在本地工作;但是,似乎在 Kestrel 下运行时,斜线会自动减少为一个。将其部署到 Azure 应用服务时,会发生以下情况:
- 斜线仍然存在(例如 https://mysitecom//test//test2)
- 正确的页面位于
- 中间件只能看到一个斜杠
请有人解释为什么中间件(或重定向)在部署到 Azure 时只看到一个斜线?
(所以不允许我在帖子中使用实际 URL)
【问题讨论】:
-
什么是添加额外的斜线?
-
所以你说在使用 Kestrel 或 Azure App Service 时你想要做的事情已经完成,并且无论如何都加载了正确的页面?坦率地说,真正的解决方案是修复任何产生无效 URL 的问题。否则你是在花钱掩盖别人的错误。
-
您正在为此付出代价。
Redirect向浏览器发送 302 响应。您为出站流量付费,这意味着您实际上是在为那些格式错误的 URL 付费 -
这些 cmets 可能是真的;但是,这清楚地揭示了我不了解的有关 Azure 应用服务的一些内容。这里的问题不是:“我怎样才能让它工作”,而是“请你解释一下它为什么会这样”
-
您是在 Windows 还是 Linux 上托管?
标签: azure asp.net-core http-redirect asp.net-core-middleware