簡體   English   中英

在查詢參數中重寫正斜杠

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM