【发布时间】:2017-08-27 08:47:46
【问题描述】:
在我的 asp.net 核心应用程序(angular 4 前端)中,我接受这样的 URL:
example.com/report;url=http%3A%2F%2Fexample2.com
我想创建一个允许人们输入以下网址的重写规则:
example.com/report;url=http://example2.com
我不知道该怎么做。
我试过了:
var options = new RewriteOptions()
.AddRewrite(@"(.*);url=http:\/\/([^;]*)(.*)", "$1;url=http%3A%2F%2F$2$3", skipRemainingRules: false)
.AddRewrite(@"^report.*", "index.html", skipRemainingRules: true)
app.UseRewriter(options);
这没有用,但即使它成功了,它也不会考虑在域后有斜杠的 url,即子目录。使用组匹配模式我认为这是不可能的。它需要是对匹配组的查找和替换类型操作。
其他网络服务器将此作为解码斜杠的可配置选项。我在 asp.net 核心文档中找不到对它的任何引用。这可能吗?
【问题讨论】:
-
AFAIK 您必须在 .net-core 应用程序和 Internet 之间使用反向代理。我为此使用了 Nginx。您是否尝试过在那里进行重写?我认为它应该工作。顺便说一句,使用目录作为其他东西不是一个好主意,除非它们与您的 MVC 结构相关,但是您不会使用重写,您会将模式与控制器匹配(或者对于简单的 CMS,使用 1 个控制器来匹配所有内容然后在控制器中处理 URL-s)。如果使用 MVC,您可以在需要时返回
Redirect响应。 -
您在哪里托管您的应用程序? IIS、nginx、自托管?
-
为什么不能使用查询字符串来实际保存参数,即使用
?并将您的URL 更改为example.com/report?url=http://example2.com?然后您可能根本不需要任何 URL 重写。 -
@SergGr 我不明白你的意思。 url 已经是一个查询参数
-
@Guerrilla,如果您的网址实际上与您的示例完全相同,那么不会。根据RFC 3986
query是?(问号)之后的部分,这是大多数Web MVC 框架在执行路由和参数解析时所期望的。附言这似乎与 KyleB 建议的相同
标签: c# asp.net-core asp.net-core-mvc kestrel-http-server