简短的回答是-不,不可能,
严格地
讲话。
答案很长,是的,你可能会想出一个合理的
近似值
但你必须意识到这些局限性。
从根本上讲,HTTP是无状态的。无论发生什么特定操作,您的Web服务器都将看到
/other_page.html
还需要决定是否提供服务。为了有某种合理的限制,第一步是
你会
有
以某种方式维护服务器端状态
. 如果没有这个,您就无法将其他page.html的任何传入请求与以前的请求匹配起来。好消息是,PHP确实支持服务器端会话。
(如果没有服务器端会话,您可以尝试使用客户端会话cookie或检查referer头来实现这一点,但是对于客户机来说,这些只是他们发送给您的字符串,并且您接受了他们的承诺,因此很容易伪造)。
现在,您需要使用此会话来跟踪用户在访问另一页之前是否访问过第一页-您可以在请求第一页时在会话中设置一个变量,并在每次请求/other_page.html时,确保在服务前在会话中设置了此变量。这至少给了你一个合理的想法,他们已经访问了当前会话的第一页。
但是,您完全无法知道在浏览器中单击了什么链接来请求特定的URL,甚至无法知道是否涉及到浏览器。您的服务器只看到一个特定资源的请求和一些头。一种可能模拟这种情况的方法是在
/index.html
并将其作为查询参数添加到该页上的链接。然后将其存储在会话中,当请求其他页面检查请求是否包含具有相同随机字符串的查询参数时。
但现在是时候退后一步说-
为什么
你想这样做吗?我想不出任何好的理由来解释为什么要这样做。
这不是适当的安全措施
-你需要做好安全工作,如果这是你的动机,你应该提出要求。这也不是一个对访问者强制执行特定工作流的好方法——这是否是一个好主意是有争议的,但是不要考虑如何强制人们在B页之前访问A页,而是考虑
确切地
为什么你需要他们这样做,你的限制因素是什么,以及什么是最不具侵入性的实现它们的方式。
别忘了——
http://intranet/other_page.html
是一个统一的资源定位器,它对应于您从该页面提供的内容。如果有人有一天访问了那个地址,看到了一个有用的资源,为什么他们回来后就不能再看到它呢?我强烈建议你考虑一下为什么你想故意妨碍你的用户体验,并违背互联网对你的网站的一般运作方式。