URL重定向和重寫
1.URL重定向涉及客戶端操作,指示客戶端訪問與客戶端最初請求不同的資源,返回客戶端的重定向地址會出現在瀏覽器中。
301和302都是重定向。
301表示永久,則客戶端會緩存這個重定向地址
302表示臨時,客戶端不會緩存,臨時訪問
2.URL重寫是服務端操作,從與客戶端請求的資源不同的資源地址提供資源。重寫的URL不會返回客戶端。
擴展和選項
使用重定向中間件,規則可以使用正則表達式
var re = new RewriteOptions();
re.AddRewrite("api/todoItems/text", "api/todoItems/GetTodoItems",skipRemainingRules:true);
re.AddRedirect("api/todoItems/text", "api/todoItems/GetTodoItems");
app.UseRewriter(re);
將非www重定向到www
re.AddRedirectToWww();
re.AddRedirectToWwwPermanent();
重定向到https
re.AddRedirectToHttps();
re.AddRedirectToHttps(301,443);
應用文件
re.AddApacheModRewrite(file stream);
re.AddIISUrlRewrite(file stream);
基於方法的規則,自定義重定向規則
public class RedirectRules
{
public static void RedirectXmlFileRequests(RewriteContext context)
{
var request = context.HttpContext.Request;
if(request.Path.StartsWithSegments(new PathString("/xmlfiles")))
{
return;
}
if (request.Path.Value.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
{
var response = context.HttpContext.Response;
response.StatusCode = StatusCodes.Status301MovedPermanently;
context.Result = RuleResult.EndResponse;
response.Headers[HeaderNames.Location] = "/xmlfiles" + request.Path + request.QueryString;
}
}
}
調用
re.Add(RedirectRules.RedirectXmlFileRequests);
基於IRule的規則
繼承IRule,實現ApplyRule方法
action中的重定向
RedirectToAction 302
RedirectToActionPermanent 301
Ok(RedirectToAction) 200
重定向的地址其實就是當HTTP Status爲3XX開頭時,在Header中查找Location,然後重新訪問這個Loacation地址