Подтвердить что ты не робот

Пользовательская страница 404 - PHP

У меня есть пользовательская страница 404, которая отлично работает, за исключением сообщения, которое я хочу отобразить на этой странице.

Я бы хотел, чтобы он указал URL-адрес страницы, который не может быть найден, но вместо этого он отображает URL-адрес страницы 404.

Вот что у меня есть...

You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.

Файл htaccess содержит строку: ErrorDocument 404 /404/

4b9b3361

Ответ 1

Вместо этого вам нужно использовать $_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.

Ответ 2

С точки зрения php-страницы, это действительно запрос uri. Отображение страницы ошибки выполняется на веб-сервере. Например, Apache добавит дополнительные серверные переменные. REDIRECT_URL, вероятно, тот, который вы ищете.

Ответ 3

Я не писал эту функцию, но это то, что я использую, чтобы сделать то же самое:

    function selfURL() {
    $s = empty($_SERVER["HTTPS"]) ? ''
        : ($_SERVER["HTTPS"] == "on") ? "s"
        : "";
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? ""
        : (":".$_SERVER["SERVER_PORT"]);
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}
function strleft($s1, $s2) {
    return substr($s1, 0, strpos($s1, $s2));
}

затем распечатать его:

<?php print(selfURL()); ?>

Ответ 4

Если страница не существует, вы перенаправляете его на страницу 404? Idealy, я бы отобразил 404 непосредственно на странице, которая не была найдена. Таким образом, вам не нужно перенаправлять, и вы можете правильно использовать REQUEST_URI. И код для вашего 404 все равно может быть централизован!

Ответ 5

используйте file_exists, чтобы проверить, существует ли файл, который ищет ваш пользователь, или нет. если он не перенаправляет их на страницу сделанных пользователем ошибок.