在我的asp.net核心应用程序(角度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);
这没有用,但即使这样做也不会解释在域之后有斜杠的网址,即子目录。使用组匹配模式我认为这是不可能的。它需要是一个发现&替换匹配组上的类型操作。
其他网络服务器将此作为解码斜杠的可配置选项。我在asp.net核心文档中找不到任何引用。这可能吗?
答案 0 :(得分:0)
您想要传递URL的参数。通过允许用户在地址栏中输入URL作为参数,实际上无法获得您想要的结果。它总是需要编码。
而不是:
http://example.com/report;url=http%3A%2F%2Fexample2.com
使用:
http://example.com/report?url=http%3A%2F%2Fexample2.com
我不是让用户将所有这些输入到浏览器地址栏中,而是创建一个用户界面,允许用户请求报告并点击提交。该报告需要一个URL文本框,它会在将URL文本框的内容编码到“网址”后向您的网站发送获取请求。参数。
使用URL重写模块可能违背了这个问题。
答案 1 :(得分:0)
不幸的是,根据RewriteRule类的代码,它是不可能的。您应该能够创建自己的自定义重写规则,通过该规则实现IRule接口和URL编码部分请求路径。
可以在此处找到RewriteRule的源代码 https://github.com/aspnet/BasicMiddleware/blob/dev/src/Microsoft.AspNetCore.Rewrite/Internal/RewriteRule.cs
以下是UrlEncoder对' url'的值进行编码 https://github.com/dotnet/corefx/blob/master/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/UrlEncoder.cs