我知道在客户端(javascript)可以使用 windows.location.hash,但是无论如何都无法从服务器端访问。我在用 asp.net。
那是因为浏览器不会将这部分内容传输到服务器,抱歉。
[ RFC 2396][1]第4.1节:
当 URI 引用用于对 标识的资源,可选的片段标识符,从 通过一个交叉线(“ #”)字符的 URI,包含额外的 引用信息 < strong > 后由用户代理解释 检索操作已成功完成 URI 的一部分,但通常与 URI 结合使用。
(加重语气) 返回文章页面【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟科普】【一分钟 https://www.rfc-editor.org/rfc/rfc2396#section-4】
可能唯一的选择是在客户端读取它,并手动将其传输到服务器(GET/POST/AJAX)。 问候 阿图尔
您还可以看到如何使用后退按钮和浏览器历史记录 在 Malcan
为了排除这种可能性,您实际上并没有尝试查看 GET/POST 上的片段,而是想知道如何访问服务器端代码中的 URI 对象的那一部分,它在 URI 下。片段(MSDN 文件)。
我们遇到了这样一种情况: 我们需要跨 ASP.Net 回发持久化 URL 散列。由于浏览器默认情况下不会将哈希发送到服务器,所以这样做的唯一方法是使用一些 Javascript:
当表单提交时,获取散列(window.location.hash)并将其存储在服务器端的隐藏输入字段中。将其放在一个 ID 为“ urlhash”的 DIV 中,这样我们以后就可以很容易地找到它。
window.location.hash
urlhash
在服务器 上,如果需要使用该值,可以使用它。你甚至可以改变它,如果你需要的话。
在页面加载 在客户身上时,检查此隐藏字段的值。您将希望通过包含它的 DIV 来找到它,因为自动生成的 ID 是不可知的。是的,你可以在这里耍点小把戏。ClientID,但是我们发现使用包装器 DIV 更简单,因为它允许所有这些 Javascript 存在于一个外部文件中,并以通用的方式使用。
如果隐藏输入字段具有有效值,请将其设置为 URL 散列(window.location.hash again)和/或执行其他操作。
window.location.hash again
我们使用 jQuery 来简化字段的选择,等等... ... 总而言之,最终只需要几个 jQuery 调用,一个用于保存值,另一个用于恢复值。
递交前:
$("form").submit(function() { $("input", "#urlhash").val(window.location.hash); });
页面载入:
var hashVal = $("input", "#urlhash").val(); if (IsHashValid(hashVal)) { window.location.hash = hashVal; }
IsHashValid()可以检查“ undefined”或其他你不想处理的东西。
IsHashValid()
undefined
当然,还要确保适当地使用 $(document).ready()。
$(document).ready()
GET 请求的可能解决方案:
新的链接格式: http://example.com/yourDirectory?hash=video01
http://example.com/yourDirectory?hash=video01
将此函数调用到控制器或 http://example.com/yourDirectory/index.php的顶部:
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"); } }