Tôi đoán rằng bạn muốn làm điều này vì bạn muốn người dùng của mình nhìn thấy URL đẹp. Cách duy nhất để khách hàng "thay đổi" URL trong thanh địa chỉ là gửi URL đến vị trí mới - tức là bạn cần chuyển hướng chúng.
Thông số chuỗi truy vấn có ảnh hưởng đến đầu ra của trang của bạn không? Nếu vậy, bạn sẽ phải xem xét cách duy trì trạng thái giữa các yêu cầu (biến phiên, cookie, v.v.) vì các tham số chuỗi truy vấn của bạn sẽ bị mất ngay sau khi bạn chuyển hướng đến trang không có chúng.
Có một vài cách bạn có thể làm điều này trên toàn cầu (theo thứ tự ưu tiên):
- Nếu bạn có quyền kiểm soát trực tiếp trên môi trường máy chủ của bạn sau đó một mô-đun máy chủ cấu hình như ISAPI_ReWrite hoặc IIS 7.0 URL Rewrite Module là một phương pháp tuyệt vời.
- Một tùy chỉnh
IHttpModule
là một cách tiếp cận tốt đẹp, có thể tái sử dụng của riêng bạn.
- Bạn cũng có thể làm điều này trong
global.asax
như bạn đề nghị
Bạn chỉ nên sử dụng mã 301
phản ứng nếu các nguồn lực đã thực sự chuyển vĩnh viễn. Một lần nữa, điều này phụ thuộc vào việc ứng dụng của bạn có cần sử dụng các tham số chuỗi truy vấn hay không. Nếu bạn sử dụng chuyển hướng vĩnh viễn một trình duyệt (tuân theo mã phản hồi 301
) sẽ bỏ qua việc tải một URL như .../default.aspx?utm_source = twitter & utm_medium = social-media và tải .../default.aspx - bạn sẽ không bao giờ biết về các tham số chuỗi truy vấn.
Cuối cùng, bạn có thể sử dụng yêu cầu phương thức POST
. Điều này cung cấp cho bạn các URL sạch và cho phép bạn chuyển các tham số vào, nhưng sẽ chỉ hoạt động với các phần tử hoặc yêu cầu bạn tạo bằng cách sử dụng JavaScript <form>
.
Hoàn hảo! Cảm ơn ngài. – Chris
Điều này cuối cùng chúng tôi đã đưa ra: // bắt đầu định dạng kém chuỗi rawUrl = String.Concat (this.GetApplicationUrl(), Request.RawUrl); nếu (rawUrl.Contains ("/ post /")) { bool hasQueryStrings = Request.QueryString.Keys.Count> 1; nếu (hasQueryStrings) { Uri uri = new Uri (rawUrl); rawUrl = uri.GetLeftPart (UriPartial.Path); HtmlLink canonical = new HtmlLink(); canonical.Href = rawUrl; canonical.Attributes ["rel"] = "canonical"; Page.Header.Controls.Add (canonical); } } Tiếp theo là một hàm để tìm nạp đúng URL ứng dụng. Hoạt động hoàn hảo. – Chris
eek, không chắc chắn cách khắc phục điều đó: (lol – Chris