Вместо этого вам нужно использовать $_SERVER['HTTP_REFERER']
- это будет адрес, который они запрашивали первым.
Это работает только в точном случае, описанном в вопросе - где браузер на самом деле был перенаправлен на страницу 404. В этой ситуации $_SERVER['REQUEST_URI']
содержит URI страницы 404, а не первоначально запрошенную страницу, как описано.
Использование Apache ErrorDocument 404 /handle404.php
в конфигурации сайта или .htaccess
будет означать, что $_SERVER['REQUEST_URI']
действительно будет работать, но более надежное решение - вариант в обновлении ниже.
Обновление:
Видимо, $_SERVER['REDIRECT_URL']
может быть лучше, если немного поискать.
В обоих случаях, как указано в комментариях ниже, имейте в виду, что любые заголовки так же подвержены вредоносному контенту, как $_POST
, $_GET
и другие, поэтому обработайте их перед выводом чего-либо.
Обновление 2:
Не видел пост от @Janoz ниже - он правильно упоминает REDIRECT_URL
.