[英]Rewriting forward slashes in a query parameter
在我的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);
這不起作用,但即使這樣做也不會解釋在域之后有斜杠的URL,即子目錄。 使用組匹配模式我認為不可能這樣做。 它必須是匹配組上的查找和替換類型操作。
其他Web服務器將此作為解碼斜杠的可配置選項。 我在asp.net核心文檔中找不到任何引用。 這可能嗎?
您將要傳遞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”參數后向您的網站發送get請求。
使用URL重寫模塊可能違背了這個問題。
不幸的是,根據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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.