Этот короткий ответ - нет, это не возможно, строго говоря.
Длинный ответ таков: да, вы, вероятно, можете придумать разумное приближение этого, но вам нужно знать об ограничениях.
По сути, HTTP не имеет состояния. Независимо от того, какие конкретные действия происходят, ваш веб-сервер увидит один запрос на /other_page.html
и должен будет решить, обслуживать его или нет. Чтобы иметь какое-то разумное ограничение, первым шагом является то, что у вас будет иметь , чтобы иметь какой-то способ поддержания состояния на стороне сервера . Без этого вы не сможете сопоставить любой входящий запрос для other_page.html с предыдущими запросами. Хорошей новостью является то, что PHP имеет встроенную поддержку серверных сессий.
(Без сеансов на стороне сервера вы можете попытаться достичь этого с помощью файлов cookie сеанса на стороне клиента или с помощью проверки заголовка реферера, но тогда для клиентов банально подделывать, поскольку это просто строки, которые они отправляют вам, и вы принимаете их слово для этого).
Теперь вам нужно использовать этот сеанс, чтобы отслеживать, был ли пользователь на первой странице, прежде чем перейти на другую страницу - вы можете установить переменную в сеансе, когда запрашивается первая страница, и при каждом запросе. для /other_page.html, убедитесь, что эта переменная установлена в сеансе перед его обслуживанием. Это как минимум дает вам разумное представление о том, что они посетили первую страницу в текущем сеансе.
Однако у вас нет абсолютно никакого способа узнать, какая ссылка была нажата в браузере, чтобы запросить конкретный URL - или даже был ли вообще задействован браузер. Все, что видит ваш сервер, это запрос определенного ресурса вместе с некоторыми заголовками. Один из способов имитировать это - генерировать случайную строку при подаче /index.html
и добавлять ее в качестве параметра запроса к ссылке на этой странице. Затем сохраните его в сеансе, и когда другой_страница будет запрошена для проверки, убедитесь, что запрос содержит параметр запроса с той же случайной строкой.
Но сейчас пришло время сделать шаг назад и сказать - почему вы хотите это сделать? Я не могу придумать никаких веских причин, почему это будет сделано. Это не подходящая мера безопасности - вам нужно было бы обеспечить безопасность должным образом, и если это ваша мотивация, вы должны были бы попросить об этом. Это не очень хороший метод навязывания определенного рабочего процесса посетителям - вопрос о том, является ли это хорошей идеей, является спорным, но вместо того, чтобы думать о том, как заставить людей перейти на страницу A перед страницей B, подумайте о точно почему они нужны вам для этого, каковы ваши ограничивающие факторы и какой наименее навязчивый способ их достижения.
Не забудьте - http://intranet/other_page.html - это унифицированный указатель ресурса, который соответствует контенту, который вы обслуживаете с этой страницы. Если кто-то посещает этот адрес однажды и видит полезный ресурс, с какой стати ему нельзя снова увидеть его, когда они вернутся? Я настоятельно рекомендую вам подумать о том, почему вы хотите сознательно ограничивать работу ваших пользователей, и идти против общего способа работы интернета с вашим сайтом.