Tôi biết về phía máy khách (javascript) bạn có thể sử dụng windows.location.hash nhưng dù sao cũng không thể tìm thấy để truy cập từ phía máy chủ.
Tôi biết về phía máy khách (javascript) bạn có thể sử dụng windows.location.hash nhưng dù sao cũng không thể tìm thấy để truy cập từ phía máy chủ.
Câu trả lời:
Chúng tôi đã có một tình huống cần duy trì hàm băm URL trên các bài đăng của ASP.Net. Vì trình duyệt không gửi băm đến máy chủ theo mặc định, cách duy nhất để làm điều đó là sử dụng một số Javascript:
Khi biểu mẫu gửi, hãy lấy hàm băm ( window.location.hash
) và lưu trữ nó trong trường nhập liệu ẩn phía máy chủ Đặt cái này vào DIV với id " urlhash
" để chúng ta có thể tìm thấy nó dễ dàng sau này.
Trên máy chủ, bạn có thể sử dụng giá trị này nếu bạn cần làm gì đó với nó. Bạn thậm chí có thể thay đổi nó nếu bạn cần.
Khi tải trang trên máy khách , hãy kiểm tra giá trị của trường ẩn này. Bạn sẽ muốn tìm nó bởi DIV, nó được chứa trong ID tự động được tạo sẽ không được biết đến. Có, bạn có thể thực hiện một số thủ thuật ở đây với .ClientID nhưng chúng tôi thấy đơn giản hơn khi chỉ sử dụng trình bao bọc DIV vì nó cho phép tất cả Javascript này sống trong một tệp bên ngoài và được sử dụng theo kiểu chung.
Nếu trường đầu vào ẩn có giá trị hợp lệ, hãy đặt đó là hàm băm URL ( window.location.hash again
) và / hoặc thực hiện các hành động khác.
Chúng tôi đã sử dụng jQuery để đơn giản hóa việc chọn trường, v.v ... tất cả cuối cùng chỉ là một vài lệnh gọi jQuery, một để lưu giá trị và một số khác để khôi phục lại nó.
Trước khi gửi:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
Khi tải trang:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
có thể kiểm tra " undefined
" hoặc những thứ khác mà bạn không muốn xử lý.
Ngoài ra, chắc chắn rằng bạn sử dụng $(document).ready()
một cách thích hợp, tất nhiên.
RFC 2396 phần 4.1:
Khi tham chiếu URI được sử dụng để thực hiện hành động truy xuất trên tài nguyên đã xác định, số nhận dạng phân đoạn tùy chọn, được phân tách khỏi URI bằng ký tự dấu chéo ("#"), bao gồm thông tin tham chiếu bổ sung được tác nhân người dùng giải thích sau khi truy xuất hành động đã được hoàn thành . Như vậy, nó không phải là một phần của URI, nhưng thường được sử dụng cùng với URI.
(nhấn mạnh thêm)
Đó là vì trình duyệt không truyền phần đó đến máy chủ, xin lỗi.
Có lẽ lựa chọn duy nhất là đọc nó ở phía máy khách và chuyển nó thủ công đến máy chủ (GET / POST / AJAX). Trân trọng
Bạn cũng có thể xem cách chơi với nút quay lại và lịch sử trình duyệt tại Malcan
Chỉ cần loại trừ khả năng bạn không thực sự cố gắng nhìn thấy đoạn trên GET / POST và thực sự muốn biết cách truy cập phần đó của đối tượng URI mà bạn có trong mã phía máy chủ của mình, nó nằm trong Uri.Fragment (Tài liệu MSDN ).
Giải pháp có thể cho các yêu cầu GET:
Định dạng liên kết mới: http://example.com/yourDirectory?hash=video01
Gọi hàm này về phía trên của bộ điều khiển hoặc http://example.com/yourDirectory/index.php
:
function redirect()
{
if (!empty($_GET['hash'])) {
/** Sanitize & Validate $_GET['hash']
If valid return string
If invalid: return empty or false
******************************************************/
$validHash = sanitizeAndValidateHashFunction($_GET['hash']);
if (!empty($validHash)) {
$url = './#' . $validHash;
} else {
$url = '/your404page.php';
}
header("Location: $url");
}
}